Как вызывать конструкторы Option в Scala из Java - PullRequest
17 голосов
/ 13 марта 2011

Я работаю над смешанным проектом java / scala и пытаюсь вызвать метод объекта scala из Java. Этот метод принимает Option[Double] в качестве параметра. Я думал, что это будет работать:

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

Но Eclipse говорит мне: «Конструктор Some (Double) не определен».

Должен ли я вызывать конструктор для scala.Some по-другому?

Ответы [ 2 ]

39 голосов
/ 13 марта 2011

В Scala вы обычно переходите к Option следующим образом:

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

() является синтаксическим сахаром для apply[A](A obj) метода объекта-компаньона Option.Следовательно, он может быть напрямую вызван в Java:

Option<Double> doubleValue = Option.apply(1.0);
1 голос
/ 13 марта 2011

Вы можете создать экземпляр Some таким образом, это скомпилирует для меня,

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

Возможно, проблема в отсутствующих генериках, попробуйте сделать,

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