Hãy xem xét hai tập hợp phương pháp sau đây. Cái đầu tiên được chấp nhận, cái thứ hai bị loại bỏ là mơ hồ. Sự khác biệt duy nhất là giữa việc sử dụng int và Integer.Phương pháp varargs mơ hồ với Object và kiểu nguyên thủy
Có nhu cầu cụ thể nào để từ chối thẻ thứ hai không? Điều đó có nghĩa là chấp nhận nó sau khi boxing (mà sẽ dẫn đến tập đầu tiên) có một vấn đề. Tôi nhớ gì ở đây?
Từ quan điểm của tôi, trình biên dịch Java quá hạn chế ở đây.
Set 1:
public void test(Object... values) {}
public void test(Integer x, Object... values) {} // difference here
public void b() {
test(1, "y"); // accepted
}
Set 2:
public void test(Object... values) {}
public void test(int x, Object... values) {} // difference here
public void b() {
test(1, "y"); // marked as ambiguous
}
Set 2 tạo ra lỗi biên dịch:
error: reference to test is ambiguous
test(1, "y"); // marked as ambiguous
^
both method test(Object...) in T and method test(int,Object...) in T match
Java 1.8, Eclipse Oxygen
Các methos từ Set 1 và Set 2 nằm trong cùng một lớp? –
@RafaelVieiraCoelho Tất nhiên là không. – Kayaman
cùng một lớp. Tôi chỉ chỉnh sửa lớp để thay đổi giữa hai lớp. –