So konvertieren Sie ein scala Int in java Integer?
Ich bin angemessenen neuen scala und arbeiten mit scala und Java zusammen.
Ich versuche zum bestehen einer scala Int in einer Methode akzeptiert ein Integer(java.lange.Integer). Denn Sie sind von verschiedenen Typen, die der compiler gibt einen Fehler aus.
/* 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])
Versuchte ich mit .instanceOf [java.lang.Integer], aber das funktioniert nicht, entweder..
Ich bin nicht sicher, wie man dieses Problem lösen.. Kann mir jemand helfen bitte?
Danke.
- In den code-Zeilen, die Sie geschrieben sind verwirrend. Was genau ist die Java-Methode? Welche code-Zeile genau Sie gibt einen Fehler? Was ist die genaue Fehlermeldung? Was bedeutet der Fall-Klasse zu tun? Es dauert eine
Option[Integer]
(eine seltsame Mischung aus ScalaOption
und ein Java -Integer
). - Der case-Klasse ist eine
Option[Integer]
und nicht einInteger
. EinOption
ist nicht einInteger
, so können Sie wirken auf das andere.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, die meisten anderen Antworten bedecken Sie es, Ihr Problem ist mit der Option, nicht mit dem Unterschied zwischen scala-und java-Integer-zahlen. Es gibt viele Dinge, die Sie tun können, mit Optionen, zum Beispiel:
Gegeben:
val i = optionOfInteger.get
)val i = optionOfInteger.getOrElse(0)
)val optionOfString = optionOfInteger.map(_.toString)
)val str = optionOfInteger.fold("Nothing")(_.toString)
)Eine gute Verwendung für Sie in Ihrem Fall sein könnte, um die Entscheidung zu nennen oder NICHT zu nennen, die java-Methode.
def myFn(findingFrame: FindingFrame) = {
findingFrame.in.foreach{i => javaMethod(i) }
}
In der oben könnten Sie anzeigen, oder match/Fall statt.
Ich glaube, dein problem ist nicht so viel über scala.Int vs. java.lang.Integer aber die Verwendung von Option-Typen.
Kurze Antwort: dies scheint für mich arbeiten
val i: Int = 7
neue findingFrame("foo", Manche(ich), None)
Lange Antwort:
Der scala-Option-Typen Wrapper, die möglicherweise oder möglicherweise nicht enthalten, die einen Wert des generischen Typs. Die Idee ist zu vermeiden, dass Java null-Werte.
Eine Option kann entweder None (keinen Wert enthalten) oder Einige[T] (enthält den Wert) - Keine und Einige sind Unterklassen der Option hier. So müssen Sie nur wickeln Sie Ihre scala Int in eine eine wie im code oben.
Scala mit box für primitive Typen, kann es passieren, direkt auf Java.
In den folgenden code, Typ i ist eigentlich
int
, undint
können übergeben Random erfordertlong
seitint
konvertierenlong
automatisch.Int den folgenden code, mit
Option[Integer]
,Option[Integer].get
erhalten Sie den Wert im inneren der TypInteger
. UndInteger
können nicht direkt übergeben zulong
können wir zwar verwenden.toLong
konvertierenLong
wird automatisch unbox zulong
.Alles, was Sie tun müssen, ist, übergeben Sie den int-Wert an den Konstruktor der Integer - (). Übergeben Sie dieses neue Objekt weiter.