ho il seguente codice in Java:Chiamata metodo Java vararg da Scala con primitive
public class JavaClass {
public static void method(Object x) {
}
public static void varargsMethod(Object... x) {
}
}
Quando provo e accedervi da Scala,
object FooUser {
JavaClass.method(true)
JavaClass.varargsMethod(true) // <-- compile error
}
ottengo il seguente errore di compilazione:
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]
Il messaggio di errore è molto utile e mostra come correggere l'errore, ma mi chiedevo perché il compilatore è (un pparently) felice di convertire implicitamente uno scala.Boolean
in una chiamata di metodo ma non l'altra. È un bug o intenzionale?
Aggiornamento aggiornato per aggiungere: Sto usando Scala 2.8. Se eseguo la firma varargsMethod
public static <T> void varargsMethod(T... xs) {
, l'errore scompare. Sono ancora perplesso sul perché il compilatore non riesca a capirlo.
GRAZIE! Questo trucco void varargsMethod (T ... xs) funziona !!! –
ZiglioUK