简体   繁体   English

如何从Java调用scala的Option构造函数

[英]How to call scala's Option constructors from Java

I am working on a mixed java/scala project, and I am trying to call a scala object's method from Java. 我正在研究一个混合的java / scala项目,我试图从Java调用scala对象的方法。 This method takes an Option[Double] as a parameter. 此方法将Option[Double]作为参数。 I thought this would work: 我认为这会奏效:

Double doubleValue = new Double(1.0);
scalaObj.scalaMethod(new Some(doubleValue));

But Eclipse tells me "The constructor Some(Double) is undefined". 但Eclipse告诉我“构造函数Some(Double)未定义”。

Should I be calling the constructor for scala.Some differently? 我应该调用scala.Some的构造函数。 scala.Some不同?

In Scala you normally lift to Option as follows: 在Scala中,您通常会按如下方式升级到Option:

scala> val doubleValue = Option(1.0)
doubleValue: Option[Double] = Some(1.0)

() is a syntactic sugar for apply[A](A obj) method of Option 's companion object. ()Option的伴随对象的apply[A](A obj)方法的语法糖。 Therefore, it can be directly called in Java: 因此,它可以直接在Java中调用:

Option<Double> doubleValue = Option.apply(1.0);

You can construct a Some instance that way, this compiles for me, 你可以用这种方式构造一个实例,这为我编译,

Some<Double> d = new Some<Double>(Double.valueOf(1));

The problem may be the missing generics, try doing, 问题可能是缺少的泛型,尝试做,

scalaObj.scalaMethod(new Some<Double>(doubleValue));

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM