Подтвердить что ты не робот

Что означает "конструктор... двусмысленный"?

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

Случай конструктора (проблема, решение, double, CaseSource) неоднозначен

4b9b3361

Ответ 1

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

Например:

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

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

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

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

Ответ 2

Это означает, что у вас есть два конструктора с одной и той же сигнатурой или что вы пытаетесь создать новый экземпляр 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
    }
}

Ответ 3

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

class Foo {

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

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

}

Ответ 4

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