は以下のScalaのオブジェクトを考える:JavaのかっこなしでScalaオブジェクトのvalにアクセスできますか?
object ScalaObject {
val NAME = "Name"
}
ScalaのコンパイラがNAME
フィールドにアクセスするためのパラメータのないメソッドを生成していることが表示されます。
System.out.println(ScalaObject$.MODULE$.NAME());
アクセスにJavaのを許可するようにScalaのコンパイラを同軸にする方法はあります:私は、Javaからこのフィールドにアクセスしようとしたときのようなパラメータのないメソッドは、このフィールドにアクセスする唯一の方法があるようにしかし、それが見えます期待されるJavaのイディオムあたりval
:
System.out.println(ScalaObject$.MODULE$.NAME);
小文字の値でも同じことが起こりますか? – ziggystar
途中で期待される* Java *イディオムではなく、期待される* Scala *イディオムです。バイトコードに関しては、Scala(ほぼ?)はフィールドを常に同じ名前のゲッターメソッドとして公開します。 –
@AndrzejDoyle、あなたが言っていることは分かりません。 Javaでは、それを行う唯一の方法なので、括弧なしでstatic finalフィールドにアクセスすることが期待されています。あなたが示唆しているように思われるのは、Scalaでは、期待される手法はゲッターメソッドを使うことです。いずれにしても、Scalaの推奨技術は何であれ、Scalaで実装されるAPIのJavaクライアントには関係していないようです。 –