Bu pasajı tökezledim:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Bu derleme hatasına neden olacaktır:
Hata: (15, 9) java: printSum referansı ParamTest'te hem printSum (int, double) yöntemi hem de ParamTest eşleşmesinde printSum (uzun, uzun) yöntemi belirsiz
Bu nasıl belirsiz? İlk parametre zaten int olduğundan bu durumda yalnızca ikinci parametre yükseltilmemelidir? Bu durumda ilk parametrenin desteklenmesi gerekmez, değil mi?
Başka bir yöntem eklemek için kodu güncelleştirirseniz derleme başarılı:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
Sadece açıklığa kavuşturmak için genişleyeyim. Aşağıdaki kod belirsizliğe neden olur:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, long b) {
System.out.println("In long " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Daha sonra aşağıdaki bu kod da belirsizliğe neden olur:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(double a, long b) {
System.out.println("In doubleLONG " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Ancak bu bir değil belirsizlik neden:
public class ParamTest {
public static void printSum(int a, double b) {
System.out.println("In intDBL " + (a + b));
}
public static void printSum(long a, double b) {
System.out.println("In longDBL " + (a + b));
}
public static void main(String[] args) {
printSum(1, 2);
}
}
Error:(15, 9) java: reference to printSum is ambiguous both method printSum(int,double) in ParamTest and method printSum(long,long) in ParamTest match
- belirsiz olan yöntem değil, belirsiz olan yöntemin çağrısıdır.