2013-11-01 4 views
0

У меня есть следующий класс:Почему этот метод неоднозначен?

public abstract class AbstractMongoDAO<T extends AbstractChiliEntity> implements IDAO<ObjectId, T> { 

    // Method 1  
    protected List<DBObject> getByQuery(Object... pairs) { 
     DBObject dbobject = //... 
     return getByQuery(dbobject); 
    } 

    // Method 2  
    protected List<DBObject> getByQuery(Map<String, Object> map) { 
     DBObject dbobject = //... 
     return getByQuery(dbobject); 
    } 

    // Method 3 
    protected List<DBObject> getByQuery(DBObject query) { 
     List<DBObject> dbobjects = //... 
     return dbobjects; 
    } 

    // Inherited methods here - they have nothing at all to do with the methods above. 
} 

Метод 1 и 2 являются просто разными подходами к построению DBObject, который затем передается в метод 3 для того, чтобы запросить экземпляр MongoDB и возвращает набор результатов.

Компилятор жалуется на оператора возврата метода 1 и 2:

The method getByQuery(Object[]) is ambiguous for the type AbstractMongoDAO<T> 

Почему это? Программа компилируется, если я комментирую метод 2. Если я комментирую метод 1, однако, я получаю ту же ошибку компилятора, но вместо метода 2.

+1

Пробовал с моим компилятором, никаких проблем. В методе 2 'dbobjects' должен был быть изменен на' dbobject', но это все. Убедитесь, что ваш пример содержит действительно все, чтобы воспроизвести проблему. О, или сообщите нам версию Java, которую вы используете. Я пробовал 'javac' с Java 6 до 8 и компилятор eclipse с тем же результатом. – Holger

+0

Хольгер прав, нет ничего неправильного в коде, кроме как из неправильного имени переменной в методе 2. С другой стороны, и varargs был введен в java 1.5, и пришлось сделать несколько решений о том, как JVM выбирает метод для выполнения во время выполнения , Вы можете посмотреть, как выбор метода для выполнения выполняется JVM. Посмотрите на http://goo.gl/G7UbGb – nrodriguez

+0

Да, я думаю, что это может быть просто проблема Eclipse ... код выглядел отлично для меня, поэтому, почему я был озадачен ошибками. Я подтвержу, когда вернусь домой. – csvan

ответ

0

Оказывается, это проблема с Eclipse, которая сообщает об ошибке, когда это просто не так. Я отправлю отчет об ошибке.

Используемая версия Eclipse - это сборка Java EE на основе Eclipse 4.3, build id: 20130919-0819.

Смежные вопросы