我正在为以下代码获取方法歧义错误

时间:2019-07-15 17:15:44

标签: java methods

我的问题与方法的歧义有关。

在这里代码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)

3 个答案:

答案 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表示float10.05D表示{{1} } 最好使用大写字母,这样在double(看起来像十一个)和1l(长1个)之间不会造成误解