我正在处理一个混合Java/Scala项目,我试图从Java中调用一个Scala对象的方法。该方法以一个Option[Double]
作为参数。我认为这样可以实现:
Double doubleValue = new Double(1.0);
scalaObj.scalaMethod(new Some(doubleValue));
但是Eclipse告诉我:“Some(Double)的构造函数未定义”。
我应该以不同的方式调用scala.Some
的构造函数吗?
我正在处理一个混合Java/Scala项目,我试图从Java中调用一个Scala对象的方法。该方法以一个Option[Double]
作为参数。我认为这样可以实现:
Double doubleValue = new Double(1.0);
scalaObj.scalaMethod(new Some(doubleValue));
但是Eclipse告诉我:“Some(Double)的构造函数未定义”。
我应该以不同的方式调用scala.Some
的构造函数吗?
scala> val doubleValue = Option(1.0)
doubleValue: Option[Double] = Some(1.0)
()
是Option
伴生对象的apply[A](A obj)
方法的一种简化语法糖。因此,它可以直接在Java中调用:
Option<Double> doubleValue = Option.apply(1.0);
`def startServer(localBind: Option[Int] = None): Unit = { ... }`
Java调用`Option so = Option.apply(9002);`
`AcmeClient.startServer(so);`
- drusolis你可以用这种方式构造一个Some实例,这对我来说是可编译的。
Some<Double> d = new Some<Double>(Double.valueOf(1));
scalaObj.scalaMethod(new Some<Double>(doubleValue));
import scala.Some;
,所以我相信我正在使用正确的Some
。 - pkaedingnull
引用提升为Some(null)
,而不是None
。更好的做法是使用Option
伴生对象进行正确的提升。 - Vasil Remeniuk
Some<Double>
参数化,我仍然遇到问题(请参考我对@user654801回答的评论)。 - pkaeding