Tôi đang cố gắng hiểu cách java xử lý với sự mơ hồ trong các cuộc gọi hàm. Trong đoạn mã sau, cuộc gọi đến method
là mơ hồ, nhưng method2
không phải là !!!.Các phương thức java quá tải không rõ ràng với generics và varargs
Tôi cảm thấy cả hai đều mơ hồ, nhưng tại sao điều này lại biên dịch khi tôi nhận xét cuộc gọi đến method
? Tại sao method2
cũng không rõ ràng?
public class A {
public static <K> List<K> method(final K arg, final Object... otherArgs) {
System.out.println("I'm in one");
return new ArrayList<K>();
}
public static <K> List<K> method(final Object... otherArgs) {
System.out.println("I'm in two");
return new ArrayList<K>();
}
public static <K, V> Map<K, V> method2(final K k0, final V v0, final Object... keysAndValues) {
System.out.println("I'm in one");
return new HashMap<K,V>();
}
public static <K, V> Map<K, V> method2(final Object... keysAndValues) {
System.out.println("I'm in two");
return new HashMap<K,V>();
}
public static void main(String[] args) {
Map<String, Integer> c = A.method2("ACD", new Integer(4), "DFAD");
//List<Integer> d = A.method(1, "2", 3 );
}
}
EDIT: này đã đưa ra trong ý kiến: Một số IDE báo cáo cả hai như là mơ hồ - IntelliJ và Netbeans cho đến nay. Tuy nhiên, nó biên dịch tốt từ dòng lệnh/maven.
Tốt câu hỏi ... – Jivings
Có lẽ nó sẽ làm tăng thời gian biên dịch nếu java kiểm tra cho các phương pháp không sử dụng – Joelmob
@Joelmob tôi cảm thấy câu hỏi là tại sao 'method2' biên dịch khi nó có vẻ là cũng giống như mơ hồ như 'phương thức'. – Jivings