Mam następujący kod w Javie:Wywołanie metody Java vararg od Scala z prymitywów
public class JavaClass {
public static void method(Object x) {
}
public static void varargsMethod(Object... x) {
}
}
Gdy próbuję i do niego dostęp z Scala,
object FooUser {
JavaClass.method(true)
JavaClass.varargsMethod(true) // <-- compile error
}
otrzymuję następujący błąd kompilacji:
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]
Komunikat o błędzie jest bardzo pomocny i pokazuje, jak naprawić błąd, ale zastanawiałem się, dlaczego kompilator jest (pparently) z przyjemnością niejawnie konwertować scala.Boolean
w jednym wywołaniu metody, ale nie w drugim. Czy to błąd, czy zamierzony?
Zaktualizowano, aby dodać: Używam Scala 2.8. Jeśli zamiast tego podpiszę podmienną metrum, będzie to oznaczać, że błąd również zniknie. Nadal jestem zdziwiony, dlaczego kompilator nie może tego rozgryźć.
DZIĘKUJEMY! Ta sztuczka void varargsMethod (T ... xs) działa !!! –
ZiglioUK