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