私はscalaとscalaとJavaを一緒に使用することで動作します。
scala IntをInteger(Java.long.Integer)を受け入れるメソッドに渡そうとしています。型が異なるため、コンパイラによってエラーが発生します。
/* name- Option[String], id- Option[Integer] , mask- Option[String]*/
new findingFrame(name,id, mask)
case class findingFrame(name: String,
id: Option[Java.lang.Integer],
mask : Option[String])
.instanceOf [Java.lang.Integer]を使用してみましたが、これも機能しません。
これを解決する方法がわかりません。誰かが私を助けてくれますか?ありがとうございました。
私は他のほとんどの答えがそれをカバーしていると思います、あなたの問題はオプションの使用であり、scalaとJava integersの違いではありません。多くのことができます。たとえば、オプションを使用します。
_val optionOfInteger = Option(5)
_
val i = optionOfInteger.get
_)val i = optionOfInteger.getOrElse(0)
)val optionOfString = optionOfInteger.map(_.toString)
)val str = optionOfInteger.fold("Nothing")(_.toString)
)def myFn(findingFrame: FindingFrame) = { findingFrame.in.foreach{i => javaMethod(i) } }
上記では、代わりにマップ、またはマッチ/ケースを使用できます。
必要なのは、int値をInteger()のコンストラクターに渡すことだけです。この新しいオブジェクトを渡すことができます。
scala> val n = 20
n: Int = 20
scala> new Integer(n)
res0: Integer = 20
scala> res0.getClass
res1: Class[_ <: Integer] = class Java.lang.Integer
Scalaはプリミティブ型のボックスを使用しており、Javaに直接渡すことができます。
次のコードでは、タイプiは実際にはint
であり、int
はlong
に自動的に変換されるため、int
を必要とするランダムにlong
を渡すことができます。
val i = 3
println(i.getClass)
println(new Random(i))
次のコードにOption[Integer]
、Option[Integer].get
を使用すると、Integer
型の値が内部に取得されます。また、Integer
をlong
に直接渡すことはできませんが、.toLong
を使用してLong
に変換すると、自動的にlong
に展開されます。
val oi: Option[Integer] = new Some(3)
println(oi.getClass)
println(new Random(oi.get.toLong))
あなたの問題はscala.IntとJava.lang.Integerではなく、Option型の使用についてだと思います。
短い答え:これは私にとって有効なようですval i:Int = 7 new findingFrame( "foo"、Some(i)、None)
長い答え:scalaオプションタイプは、ジェネリックタイプの値を含む場合と含まない場合があるラッパーです。アイデアは、Javaのnull値を回避することです。オプションは、いずれかである可能性があります(含まない)値)またはSome [T](値を含む)-NoneおよびSomeはここではOptionのサブクラスです。したがって、上記のコードのように、scala IntをSomeにラップする必要があります。
scala> val i: Java.lang.Integer = 1
i: Integer = 1
scala> val id: Option[Java.lang.Integer] = Some(i)
id: Option[Integer] = Some(1)
scala> id.get.getClass
res9: Class[_ <: Integer] = class Java.lang.Integer