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。
試過我的編譯器,沒有任何問題。在方法2中'dbobjects'必須改爲'dbobject',但僅此而已。確保你的例子包含真正的一切來重現問題。哦,或者告訴我們你使用的Java版本。我嘗試從Java 6到8和Eclipse編譯器'javac'具有相同的結果。 – Holger
Holger是正確的,除了方法2中錯誤的變量名之外,代碼沒有錯。 另一方面,java 1.5引入了可變參數,並且必須對JVM如何選擇在運行時執行的方法做出決定。您可以看看JVM如何選擇要執行的方法。 看看http://goo.gl/G7UbGb – nrodriguez
是的,我認爲這可能只是一個Eclipse問題...代碼對我來說也很好,因此我爲什麼對這些錯誤感到困惑。將確認我何時回家。 – csvan