tengo el siguiente código en Java:Llamando al método Java vararg de Scala con primitivas
public class JavaClass {
public static void method(Object x) {
}
public static void varargsMethod(Object... x) {
}
}
Cuando intento acceder a ella desde Scala,
object FooUser {
JavaClass.method(true)
JavaClass.varargsMethod(true) // <-- compile error
}
me sale el siguiente error de compilación:
type mismatch; found : Boolean(true) required: java.lang.Object Note: primitive types are not implicitly converted to AnyRef. You can safely force boxing by casting x.asInstanceOf[AnyRef]
El mensaje de error es muy útil y muestra cómo solucionar el error, pero me preguntaba por qué es el compilador (pparently) feliz de convertir implícitamente un scala.Boolean
en una llamada de método pero no en la otra. ¿Es esto un error o intencional?
Actualizado para añadir: Estoy usando Scala 2.8. Si hago la firma varargsMethod
public static <T> void varargsMethod(T... xs) {
en su lugar, el error también desaparece. Todavía estoy desconcertado sobre por qué el compilador no puede resolverlo.
¡GRACIAS! Este truco void varargsMethod (T ... xs) funciona !!! –
ZiglioUK