作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
给定 Scala 中的服务:
class ScalaService {
def process1(s: Option[String], i: Option[Int]) {
println("1: " + s + ", " + i)
}
}
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))
}
最佳答案
方法签名也会有点困惑,但您可以使用模式匹配来处理各种类型 - 例如:
class ScalaService {
def process1(s: Option[String], i: Option[Any]) {
i match {
case Some(i2:Int) => processInternal(s, Some(i2))
case Some(i2:java.lang.Integer) => processInternal(s, Some(i2.intValue))
case _ => processInternal(s, None) // or throw exception if you prefer
}
def processInternal(s:Option[String], i:Option[Int]) {
println("1: " + s + ", " + i)
}
}
}
java.lang.Integer
的隐式转换至
Int
也可以工作吗?
关于Scala/Java 互操作性 : How to deal with options containing Int/Long (primitive types)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17071061/
我是一名优秀的程序员,十分优秀!