web-dev-qa-db-ja.com

scala IntをJava Integerに変換する方法は?

私は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]を使用してみましたが、これも機能しません。

これを解決する方法がわかりません。誰かが私を助けてくれますか?ありがとうございました。

13
Goldengirl

私は他のほとんどの答えがそれをカバーしていると思います、あなたの問題はオプションの使用であり、scalaとJava integersの違いではありません。多くのことができます。たとえば、オプションを使用します。

_val optionOfInteger = Option(5)
_
  • (醜い)あなたのオプションが常に値を持っていると仮定し、単にget(_val i = optionOfInteger.get_)
  • デフォルト値を適用:(val i = optionOfInteger.getOrElse(0)
  • 整数のオプションを別のオプションにマップできます(val optionOfString = optionOfInteger.map(_.toString)
  • 最後の2つの両方を1回の呼び出しで実行できます(val str = optionOfInteger.fold("Nothing")(_.toString)
  • Optionを1つのコレクションと考えることもできます。そのため、Optionsを使用して実行できるコレクションで実行できるすべての素敵なこと(他のタイプのコレクションへの変換、折りたたみなど)を使用できます。 、Javaメソッドを呼び出すかどうかを決定することになるかもしれません。

def myFn(findingFrame: FindingFrame) = { findingFrame.in.foreach{i => javaMethod(i) } }

上記では、代わりにマップ、またはマッチ/ケースを使用できます。

2
rleibman

必要なのは、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
2

Scalaはプリミティブ型のボックスを使用しており、Javaに直接渡すことができます。

次のコードでは、タイプiは実際にはintであり、intlongに自動的に変換されるため、intを必要とするランダムにlongを渡すことができます。

val i = 3
println(i.getClass)
println(new Random(i))

次のコードにOption[Integer]Option[Integer].getを使用すると、Integer型の値が内部に取得されます。また、Integerlongに直接渡すことはできませんが、.toLongを使用してLongに変換すると、自動的にlongに展開されます。

val oi: Option[Integer] = new Some(3)
println(oi.getClass)

println(new Random(oi.get.toLong))
2
Rockie Yang

あなたの問題は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にラップする必要があります。

2
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
1
Jacko