Tôi có một câu hỏi liên quan đến đoạn mã sau:vấn đề Java với var-args và boxing
class VarArgsTricky {
static void wide_vararg(long... x) {
System.out.println("long...");
}
static void wide_vararg(Integer... x) {
System.out.println("Integer...");
}
public static void main(String[] args) {
int i = 5;
wide_vararg(i, i, i); // needs to widen and use var-args
Long l = 9000000000l;
wide_vararg(l, l); // prints sucessfully "long..."
}
}
Cuộc gọi đầu tiên wide_vararg thất bại trong việc biên dịch (nói rằng phương pháp này là ambigous) trong khi thứ hai chỉ biên dịch khỏe.
Bất kỳ giải thích nào về hành vi này? Cảm ơn!
Nếu đây không chỉ là một thử nghiệm về quá tải, vui lòng đọc Hiệu quả Java SE: Mục 41 Sử dụng quá tải một cách thận trọng. – TJR
Đây hoàn toàn là một thử nghiệm, chỉ để giải quyết một câu hỏi tiềm năng cho kỳ thi chứng chỉ OCPJP. –