私はこのスニペットを偶然見つけました:
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への参照は、ParamTestのメソッドprintSum(int、double)とParamTestのメソッドのprintSum(long、long)の両方であいまいです
これはどのようにあいまいですか?この場合、最初のパラメーターは既にintであるため、2番目のパラメーターだけを昇格する必要はありませんか?この場合、最初のパラメーターを昇格する必要はありませんか?
コードを更新して別のメソッドを追加すると、コンパイルは成功します。
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
です。-あいまいなのはメソッドではなく、あいまいなのはメソッドの呼び出しです。