我收到以下代码的方法歧义错误



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

这里的代码 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表示float10.05D表示double最好使用大写字母,因此1l(看起来像 11(和 1L(1 长(之间没有误解

相关内容

  • 没有找到相关文章

最新更新