このスニペットにつまずいた:
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とMethod PrintSum(Long、Long)のparamtest matchのメソッドprintsum(int、double)の両方があいまいです
これはどのようにあいまいですか?最初のパラメータはすでに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);
}
}
_
int値はJavaのdoubleと見なすこともできます。 _double a = 3
_は長い_long b = 3
_で有効で同じです。そのため、あいまいさを作成している理由です。あなたが呼ぶ
_printSum(1, 2);
_
これら3つすべてが有効であるため、3つのメソッドすべてを混乱させています。
_int a = 1;
double b =1;
long c = 1;
_
最後にLを設定して、長い値であることを指定できます。例えば:
_printSum(1L, 2L);
_
ダブルのためにそれを変換する必要があります。
_printSum((double)1, 2L);
_
@Erowin Bolwidtのコメントも読みます