質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

Q&A

解決済

2回答

3472閲覧

ScalaでJavaでいうところの参照渡しはできますか

mufa

総合スコア11

Scala

ScalaはJava仮想マシンで動作を行うオブジェクト指向型プログラミング言語の1つです。静的型付けの関数型言語で、コンパイルエラーの検出に強みがあります。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Spring

Spring Framework は、Javaプラットフォーム向けのオープンソースアプリケーションフレームワークです。 Java Platform上に、 Web ベースのアプリケーションを設計するための拡張機能が数多く用意されています。

0グッド

0クリップ

投稿2017/03/24 08:33

編集2017/03/24 08:55

Scalaクラスから自前のJavaクラスを呼び出し変数の参照渡しのようなことはできるのでしょうか
以下のエラーが発生し解決でません
value getContextVal is not a member of object main.SampleThread ScalaSample.scala

Java

1// Mapのキー"XXX" , 値"aa"をもつ 2public class SampleThread 3 public Map<Thread, String> map = new Map<Thread, String>(); 4 public String context = "aa"; 5 6 public String getContextVal() { 7 return map.get(Thread.currentThread()); 8 } 9 public void putVal() { 10 return map.put(Thread.currentThread(), context); 11 }

Scala

1class ScalaSample { 2// Scalaでやりたいことです 3// JavaクラスのSampleThreadのgetContextValから値を上書きたいです 4 5val sval:String = main.java.SampleThread.getContextVal 6// キー"XXXX"の値を"bb"に設定する 7sval.setContext("bb") 8} 9

Java

1// メインクラスで呼び出す 2public class SampleMain { 3 public static void main(String args){ 4 SampleThread th = new SampleThread(); 5 th.putVal(); 6// ここでScalaクラスが実行されるように実装してます 7 System.out.println(th.getVal()); 8 } 9}

Java

1//Javaの実行結果 2 bb

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

まず、Javaには「参照渡し」というものは存在しません。全て値渡しです。参照型は参照値を値渡ししているに過ぎません。詳しくは下記記事を読んでください。

もう参照渡しとは言わせない - Qiita

さて、エラーの原因です。

まず、SampleThreadクラスのgetContextValはインスタンスメソッドで定義されています。次に、main.java.SampleThread.getContextValはSampleThreadクラスのgetContextValというクラスメソッドの呼び出しです。インスタンスメソッドとクラスメソッドはそれぞれ独立していますから、そんなメソッドがないと言うエラーになります。

インスタンスメソッドを呼び出したいのであれば、インスタンスを生成して、それを呼び出してください。クラスメソッドを呼び出したいのであれば、クラスメソッドとして定義してください。

具体的にどうしたいのかがよくわからないため、Javaだったらこのように書くというのがないと、どう修正すべかまではわかりません。

投稿2017/03/24 10:22

raccy

総合スコア21733

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

mufa

2017/03/27 01:30

ありがとうございます、値渡しも理解できました、いままで間違えて覚えていました。 また、クラスメソッドを利用してscalaからjavaを呼びだすことができました。
guest

0

ベストアンサー

Scalaクラスから自前のJavaクラスを呼び出し変数の参照渡しのようなことはできるのでしょうか

質問者さんの質問意図は単にJavaとScalaの間でオブジェクトの参照がやり取りできるかだと思います。それは大丈夫、できますよ!

value getContextVal is not a member of object main.SampleThread ScalaSample.scala

これは単に'{'が抜けている構文エラーが原因と思います。また他にもメソッドの型がvoidなのに値を返そうとしていたり、呼び出そうとしているメソッドgetValueが定義されてなかったりと複数の誤りが見られますのでまずはそれらを修正してみてください。

投稿2017/03/24 10:26

KSwordOfHaste

総合スコア18392

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

KSwordOfHaste

2017/03/24 10:34 編集

あえて参照渡しという用語にはコメントしませんでしたがraccyさんがコメントくださってるので・・・そちらをご覧いただければと。 訂正:ほんとならコメントすべきであったと思いなおしました。すみません>raccyさん、質問者さん。
mufa

2017/03/27 01:29

ありがとうございます、scalaからjavaを呼び出すことができました
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問