einen Dienst in Scala Gegeben: Scala/Java-Interoperabilität: Wie geht man mit Optionen um, die Int/Long (primitive Typen) enthalten?
public class Java {
public static void main(String[] args) {
ScalaService service = new ScalaService();
// This works, but it's confusing
{
scala.Option<String> so = scala.Option.apply("Hello");
scala.Option<Object> io = scala.Option.apply((Object) 10);
service.process1(so, io);
}
// Would be OK, but not really nice
{
scala.Option<Object> so = scala.Option.apply((Object) "Hello");
scala.Option<Object> io = scala.Option.apply((Object) 10);
service.process1(so, io); // Does not compile
}
// The preferred way
{
scala.Option<String> so = scala.Option.apply("Hello");
scala.Option<Integer> io = scala.Option.apply(10);
service.process1(so, io); // Does not compile
}
}
}
I primitiv und nicht-primitive Typen in einer anderen Art und Weise zu behandeln möchte vermeiden
:class ScalaService {
def process1(s: Option[String], i: Option[Int]) {
println("1: " + s + ", " + i)
}
}
, die von Java verwendet werden soll.
So versuchte ich, durch das Hinzufügen eines weiteren Methode, dies zu umgehen:
def process2(s: Option[String], i: Option[java.lang.Integer]) {
print("2: ")
process1(s, i.map(v => v.toInt))
}
aber dies erfordert einen anderen Namen für die Methode. Da dies aus der Sicht des Anrufers verwirrend sein könnte, gibt es noch andere Möglichkeiten?
Ich verwende Scala 2.10.1 und Java 1.6
Vielen Dank für Ihre Anregungen. Ich möchte beide Methoden (eine für Scala, eine für Java), beide mit Int/Integer. Da es viele Service-Funktionen gibt, sollte es kurz sein. Wie bei "impliziten" Parametern, AFAIK müssen sie explizit in Java hinzugefügt werden. Es sind wahrscheinlich einfach zu viele Anforderungen :-) – Beryllium