2011-03-13 7 views
15

Estoy trabajando en un proyecto mixto java/scala, y estoy tratando de llamar al método de un objeto scala desde Java. Este método toma un Option[Double] como parámetro. Pensé que esto funcionaría:Cómo llamar a los constructores de opciones de Scala desde Java

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

Pero Eclipse me dice "El constructor Some (Double) is undefined".

¿Debo llamar al constructor para scala.Some de manera diferente?

+1

En Java, los parámetros de tipo de _methods_ pueden ser inferidas (a veces), pero los parámetros de tipo de _constructors_ nunca más. –

+0

@Alexey es bueno saberlo, creo que esa es probablemente la fuente de mis problemas. Todavía estoy teniendo problemas, incluso si parametrizo 'Some ', aunque (vea mi comentario sobre la respuesta de @ user654801). – pkaeding

Respuesta

35

En Scala normalmente levantar a la Opción de la siguiente manera:

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

() es un azúcar sintáctica paraMétododel objeto complementario Option. Por lo tanto, se puede llamar directamente en Java:

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

Bingo, eso fue todo. ¡Gracias! – pkaeding

+0

Esto me ayudó también. Scala 'def startServer (localBind: Opción [Int] = None): Unidad = {...}' llamada Java opción ' so = Option.apply (9002);' ' AcmeClient. startServer (tan); ' – drusolis

1

se puede construir un cierto caso de esa manera, esto compila para mí,

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

El problema puede ser el genéricos que faltan, tratar de hacer,

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

Hmm, cuando intento obtener "El tipo Some no es genérico, no se puede parametrizar con argumentos ". ¿Podría ser solo una deficiencia en la integración de Eclipse/Scala? Tengo 'import scala.Some;' así que creo que estoy usando 'Some' correcto. – pkaeding

+5

Este enfoque tiene la desventaja de levantar una referencia 'null' a' Some (null) ', en lugar de' None'. Será mejor que use el objeto compañero 'Opción' para el levantamiento correcto. –

+0

@Vasil, gracias, tiene sentido. Tu (otra) respuesta resolvió mi problema. – pkaeding

Cuestiones relacionadas