私は次のクラスを持っています:
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 を構築するための単純な異なるアプローチであり、MongoDB インスタンスを照会して一連の結果を返すために方法 3 に渡されます。
コンパイラは、メソッド 1 と 2 の return ステートメントで文句を言います。
The method getByQuery(Object[]) is ambiguous for the type AbstractMongoDAO<T>
どうしてこれなの?方法 2 をコメント アウトすると、プログラムはコンパイルされます。ただし、方法 1 をコメント アウトすると、同じコンパイラ エラーが発生しますが、代わりに方法 2 に対して発生します。