28

scala.NoneJavaからどのようにアクセスできますか?

最後の行により、コンパイラーは「typescala.Noneはパラメーターを取りません」で終了します。

import scala.Option;
import scala.Some;
import scala.None;
final Option<String> object1 = new Some<String>("Hi there");
final Option<String> object2 = new None<String>();

これは「シンボルコンストラクターNone()が見つかりません」で失敗します。

final Option<String> object2 = new None();

これは「シンボル変数Noneが見つかりません」で失敗します。

final Option<String> object2 = None;

2007年にはこれは機能していましたが、その後Scalaが変更されました。Javaコンパイラは以下を提供しますerror: incompatible types

final Option<String> object2 = scala.None$.MODULE$;
4

6 に答える 6

36

これはうまくいくかもしれません:

final scala.Option<String> x = scala.Option.apply(null);

def apply [A](x:A):Option [A]
引数がnullでない場合はSome(x)を作成し、nullの場合はNoneを作成するオプションファクトリ。

于 2012-01-30T05:21:06.893 に答える
17

Scala 2.10.2の使用(これがいつどのバージョンで提供されたかはわかりません):

final Option<String> none = Option.empty();
于 2013-11-14T02:20:55.243 に答える
9

細かく言い過ぎないようにしましょう。ただし、静的フォワーダーは特定の状況下では生成されない可能性があるため、静的フォワーダーに依存しないでください。たとえばSome、オブジェクトコンパニオン用の静的フォワーダーはありません。

オブジェクトコンパニオンのメソッドにアクセスする現在の方法は次のとおりです。

final scala.Option<String> x = scala.Option$.MODULE$.apply(null);

Option$のオブジェクトコンパニオンのクラスですOption。は、の唯一のインスタンス(つまり、オブジェクトコンパニオン)MODULE$を含む最終的なパブリック静的フィールドです。Option$

于 2012-02-01T14:14:51.870 に答える
1

インポートできます

import scala.compat.java8.OptionConverters;

その後:

OptionConverters.<YourType>toScala(Optional.empty())
于 2017-05-08T16:05:45.020 に答える
0

次のことができます(私はそれをテストしましたが、Scala2.9.1とJava1.6で問題なく動作します):

 final Option<String> obj1 = Some.apply(null) // This will give you a None;
 System.out.println(obj1.getClass()); // will print "class scala.None$

 final Option<String> obj2 = Some.apply("Something");
 System.out.println(obj2.getClass()); //will print "class scala.Some
于 2012-01-30T05:29:44.730 に答える
0

Scalaバージョン2.11.4を使用して、私の場合にうまくいったのは

Option<String> maybeAmount = (amount != MISSING_STOCKAMOUNT) 
? Some.apply(amount+"") : Option.<String>apply(null); // can you feel the pain??

更新:1日後...

Option.apply(null);

typeパラメータがなくても、正常に機能します。何らかの理由で、最初の試みでIntellijにコードをコンパイルさせることができませんでした。二次型パラメーターを渡さなければなりませんでした。今それはコンパイルされます、ただ尋ねないでください

于 2016-09-08T01:51:29.523 に答える