我的问题与方法歧义有关。
这里的代码 1 打印"first"没有歧义错误,即使 foo(int i , int s( 定义了两次相同的参数 .it 选择第一个方法并成功执行它,但是如果我将两个方法参数修改为 foo(int i,long s( 和 foo(long i,int d( 那么它会给出以下错误,所以我的问题是为什么它在这里显示歧义,如果在第一种情况下它已成功工作 -
错误-
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method foo(int, long) is ambiguous for the type StaticFunc
at StaticFunc.main(StaticFunc.java:6)
代码 1
public class StaticFunc {
public static void main(String[] args) {
foo(10, 100);
}
public static void foo(int i, int s) {
System.out.println("first");
}
public static void foo(int i, int d) {
System.out.println("Second");
}
}
代码 2
public class StaticFunc {
public static void main(String[] args) {
foo(10, 100);
}
public static void foo(int i,long s) {
System.out.println("first");
}
public static void foo(long i,int d) {
System.out.println("Second");
}
}
我希望输出是第一个,但出现错误
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
The method foo(int, long) is ambiguous for the type StaticFunc
at StaticFunc.main(StaticFunc.java:6)
我不确定你的第一段代码是如何执行的,你应该得到什么 - 错误:方法 foo(int,int( 已经在类 StaticFunc 中定义
虽然第二个代码的输出是预期的,因为编译器不知道要调用哪个方法。Java编译器不认为它们中的任何一个更具体,因此方法不明确调用错误。
如果要执行第二个代码,可以使用 long 参数调用函数foo(10L,100)
尝试像这样调用该方法:
foo(10,100l);
foo(10l,100);
我猜错误与 Java 的原始类型有关,编译器不知道选择什么方法,因为两个参数都是 int。
指定哪些很长,编译器会找到要调用的
在java中,你可以告诉编译器你有什么样的数字,如果你看一下签名,你有:
public static void foo(int i,long s)
public static void foo(long i,int d)
方法重载,没关系,但是现在,当您使用这些方法时,您有不同的类型作为foo
您可以通过多种方式执行此操作:
int x = 10;
long y = 100;
foo(x, y)
或者只是
foo(10, 100L)
L
表示您的号码是long
类型,也可以用10.02F
表示float
或10.05D
表示double
最好使用大写字母,因此1l
(看起来像 11(和 1L
(1 长(之间没有误解