我的问题与方法的歧义有关。
在这里代码1即使在两次使用相同参数定义foo(int i,int s)的情况下,也可以打印出“ first”而没有歧义错误。它选择第一个方法并成功执行,但是如果我将两个方法的参数都修改为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)
答案 0 :(得分:0)
尝试调用这样的方法:
foo(10,100l);
foo(10l,100);
我猜该错误与Java的原始类型有关,由于两个参数均为int,编译器不知道选择哪种方法。
指定长哪些,编译器会找到要调用的那个
答案 1 :(得分:0)
我不确定您的第一个代码是如何执行的,如何确定应该执行-错误:类StaticFunc中已经定义了方法foo(int,int)
虽然期望第二个代码的输出,因为编译器不知道该调用哪种方法。Java编译器认为它们中的任何一个都不是更具体的,因此该方法模棱两可的调用错误。
如果要执行第二个代码,则可以使用foo(10L,100)
答案 2 :(得分:0)
在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
表示{{1} }
最好使用大写字母,这样在double
(看起来像十一个)和1l
(长1个)之间不会造成误解