2013-11-01 107 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的return語句:

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

這是爲什麼?如果我註釋掉方法2,則該程序會編譯。但是,如果我註釋掉方法1,則會出現相同的編譯器錯誤,但是會出現方法2。

+1

試過我的編譯器,沒有任何問題。在方法2中'dbobjects'必須改爲'dbobject',但僅此而已。確保你的例子包含真正的一切來重現問題。哦,或者告訴我們你使用的Java版本。我嘗試從Java 6到8和Eclipse編譯器'javac'具有相同的結果。 – Holger

+0

Holger是正確的,除了方法2中錯誤的變量名之外,代碼沒有錯。 另一方面,java 1.5引入了可變參數,並且必須對JVM如何選擇在運行時執行的方法做出決定。您可以看看JVM如何選擇要執行的方法。 看看http://goo.gl/G7UbGb – nrodriguez

+0

是的,我認爲這可能只是一個Eclipse問題...代碼對我來說也很好,因此我爲什麼對這些錯誤感到困惑。將確認我何時回家。 – csvan

回答

0

原來,這是Eclipse的一個問題,如果沒有,Eclipse會報告這是一個錯誤。我將提交一份錯誤報告。

使用的Eclipse版本是基於Eclipse 4.3的Java EE版本,版本號:20130919-0819。

相關問題