Tôi có đoạn code sau trong Java:gọi method Java vararg từ Scala với nguyên thủy
public class JavaClass {
public static void method(Object x) {
}
public static void varargsMethod(Object... x) {
}
}
Khi tôi cố gắng và truy cập nó từ Scala,
object FooUser {
JavaClass.method(true)
JavaClass.varargsMethod(true) // <-- compile error
}
tôi nhận được lỗi biên dịch sau:
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]
Thông báo lỗi rất hữu ích và hiển thị cách khắc phục lỗi, nhưng tôi tự hỏi tại sao trình biên dịch lại là (pparently) vui vẻ chuyển đổi một cách rõ ràng scala.Boolean
trong một cuộc gọi phương thức nhưng không phải là phương thức khác. Đây có phải là lỗi hoặc cố ý không?
Đã cập nhật để thêm: Tôi đang sử dụng Scala 2.8. Nếu tôi thực hiện chữ ký varargsMethod
public static <T> void varargsMethod(T... xs) {
thay vào đó, thì lỗi cũng biến mất. Tôi vẫn còn bối rối là tại sao trình biên dịch không thể tìm ra được.
CẢM ƠN BẠN! Thủ thuật này void varargsMethod (T ... xs) hoạt động !!! –
ZiglioUK