Что значит «конструктор ... неоднозначен»? - PullRequest
24 голосов
/ 12 апреля 2011

Я хотел бы знать, что означает сообщение об ошибке в Eclipse:

Конструктор Case (Problem, Solution, double, CaseSource) является неоднозначным

Ответы [ 4 ]

40 голосов
/ 12 апреля 2011

Проблема возникает, когда вы пытаетесь создать экземпляр класса, который может применяться к нескольким конструкторам.

Например:

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

public Example(SomeOther other) {
    this.other = other;
} 

Если вы вызываете конструктор с объектом String, есть один определенный конструктор. Однако, если вы создаете экземпляр new Example(null), то он может применяться к любому из них и поэтому является неоднозначным.

То же самое можно применить к методам с похожими сигнатурами.

5 голосов
/ 17 января 2016

Чтобы добавить другие ответы, этого можно избежать, приведя аргумент к тому, что предполагается, например:

class Foo {

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

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

}
5 голосов
/ 12 апреля 2011

Это означает, что у вас есть два конструктора с одинаковой сигнатурой или вы пытаетесь создать новый экземпляр Case с параметрами, которые могут соответствовать более чем одному конструктору.

В вашем случае:

Case(Problem, Solution, double, CaseSource)

Java методы создания (конструкторы) подписи с типами параметров. У вас может быть два метода с одинаковыми одинаковыми типами параметров, и, следовательно, возможно генерировать неоднозначные вызовы, предоставляя неоднозначные аргументы, которые могут совпадать с несколькими сигнатурами метода (конструктора).

Вы можете воспроизвести эту ошибку (которая не является ошибкой затмения) с помощью этого кода:

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

    static public void main(String...args) {
        new A(null);    // <== constructor is ambiguous
    }
}
4 голосов
/ 05 июня 2012

Другими словами, неясно, какой из конструкторов должен быть вызван.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...