Scala でサービスが与えられた場合:
class ScalaService {
def process1(s: Option[String], i: Option[Int]) {
println("1: " + s + ", " + i)
}
}
これはJavaから使用されます:
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
}
}
}
プリミティブ型と非プリミティブ型を別の方法で扱うことは避けたいと思います。
そこで、別の方法を追加してこれを回避しようとしました。
def process2(s: Option[String], i: Option[java.lang.Integer]) {
print("2: ")
process1(s, i.map(v => v.toInt))
}
ただし、これにはメソッドに別の名前が必要です。これは呼び出し元の観点から混乱を招く可能性があるため、他に可能性はありますか?
私は Scala 2.10.1 と Java 1.6 を使用しています。