ฉันสะดุดกับตัวอย่างนี้:
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);
}
}
สิ่งนี้จะส่งผลให้เกิดข้อผิดพลาดในการคอมไพล์:
ข้อผิดพลาด: (15, 9) java: การอ้างอิงถึง printSum นั้นไม่ชัดเจนทั้งสองวิธี printSum (int, double) ใน ParamTest และวิธี printSum (ยาว, ยาว) ในการจับคู่ ParamTest
ความคลุมเครือนี้เป็นอย่างไร ไม่ควรสนับสนุนเฉพาะพารามิเตอร์ตัวที่สองในกรณีนี้เนื่องจากพารามิเตอร์ตัวแรกเป็น int อยู่แล้ว? ไม่จำเป็นต้องเลื่อนชั้นแรกในกรณีนี้ใช่ไหม
การรวบรวมสำเร็จหากฉันอัปเดตรหัสเพื่อเพิ่มวิธีอื่น:
public static void printSum(int a, long b) {
System.out.println(String.format("%s, %s ", a, b));
}
ขอผมขยายให้ชัดเจนหน่อย โค้ดด้านล่างส่งผลให้เกิดความกำกวม:
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);
}
}
จากนั้นโค้ดด้านล่างนี้ยังส่งผลให้เกิดความกำกวม:
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);
}
}
อย่างไรก็ตามอันนี้ไม่ได้ทำให้เกิดความกำกวม:
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
- ไม่ใช่วิธีที่ไม่ชัดเจน แต่เป็นการเรียกไปยังวิธีที่ไม่ชัดเจน