“构造函数...存在二义性”是什么意思?

26
我想知道Eclipse中的错误消息是什么意思:

构造函数Case(Problem,Solution,double,CaseSource)存在二义性


6
Caseзұ»дёӯиҝҳжңүе“Әдәӣжһ„йҖ еҮҪж•°пјҹ - biziclop
4个回答

42

当您尝试实例化一个可能适用于多个构造函数的类时,就会出现问题。

例如:

public Example(String name) {
    this.name = name;
}

public Example(SomeOther other) {
    this.other = other;
} 
如果你用一个String对象调用构造函数,那么就有一种确定的构造函数。然而,如果你实例化new Example(null),它可以应用于任何一个构造函数,因此是不明确的。同样的情况也可能发生在参数签名相似的方法中。

4
如果你需要同时使用构造函数并能够用null进行初始化,可以将null转换为所需的变量类型。例如:new Example((String)null)。 - mauron85

7

除了其他回答之外,可以通过将参数转换为所需的类型来避免此问题,例如:

class Foo {

    public Foo(String bar) {}
    public Foo(Integer bar) {}

    public static void main(String[] args) {
        new Foo((String) null);
    }

}

5
这意味着您有两个具有相同参数签名的构造函数,或者您试图使用可能匹配多个构造函数的参数创建一个新的Case实例。

在您的情况下:

Case(Problem, Solution, double, CaseSource)

Java使用参数类型创建方法(构造函数)签名。您可以有两个具有相似参数类型的方法,因此可能会出现提供模糊参数的歧义调用,这些参数可能匹配多个方法(构造函数)签名。

您可以使用以下代码重现此错误(这不是eclipse的错):

class A {
    public A(String a) { }
    public A(Integer a) { }

    static public void main(String...args) {
        new A(null);    // <== constructor is ambiguous
    }
}

4
如何在同一签名下拥有两个构造函数。在 Eclipse 中,它会给出错误:“Cls 中的方法(params)重复”。 - Harry Joy
你不能有相同签名的两个构造函数(方法)。 - GuruKulki

4
换句话说,不清楚必须调用哪个构造函数。

3
这是一条评论,而不是回答。 - Deepak Swami
1
这是一个答案,但并不实用。也许需要更详细的解释才能帮助到您。 - Daniel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接