Scala'da bir hizmeti Verilen: isScala/Java birlikte çalışabilirliği: Int/Long (ilkel türler) içeren seçenekler nasıl ele alınır?
class ScalaService {
def process1(s: Option[String], i: Option[Int]) {
println("1: " + s + ", " + i)
}
}
Java dan kullanılmak üzere:
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
}
}
}
Ben farklı bir şekilde ilkel ve temel olmayan türlerini tedavi etmek önlemek istiyorum.
def process2(s: Option[String], i: Option[java.lang.Integer]) {
print("2: ")
process1(s, i.map(v => v.toInt))
}
ama bu yöntem için farklı bir ad gerektirir:
Yani başka bir yöntemi ekleyerek bu sorunu almaya çalıştı. Arayanın bakış açısından kafa karıştırıcı olabileceğinden, başka olasılıklar var mı?Ben metod imzası biraz da kafa karıştırıcı olacağını Scala 2.10.1 ve Java 1.6
teşekkürler. Her ikisi de Int/Integer ile her iki yöntemi (Java için bir tane Scala için) açığa çıkarmak isterim. Birçok servis fonksiyonu olduğu için, kısa olmalıdır. “Kapalı” parametrelere gelince, AFAIK, Java'ya açıkça eklenmelidir. Muhtemelen sadece çok fazla gereksinimleri var :-) – Beryllium