Java 为什么这个方法不明确?

Java 为什么这个方法不明确?,java,mongodb,overloading,Java,Mongodb,Overloading,我有以下课程: public abstract class AbstractMongoDAO<T extends AbstractChiliEntity> implements IDAO<ObjectId, T> { // Method 1 protected List<DBObject> getByQuery(Object... pairs) { DBObject dbobject = //... retur

我有以下课程:

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.
}
公共抽象类AbstractMongoDAO实现IDAO{
//方法1
受保护列表getByQuery(对象…对){
DBObject DBObject=/。。。
返回getByQuery(dbobject);
}
//方法2
受保护列表getByQuery(映射){
DBObject DBObject=/。。。
返回getByQuery(dbobject);
}
//方法3
受保护列表getByQuery(DBObject查询){
列出dbobjects=/。。。
返回dbobjects;
}
//这里继承的方法-它们与上面的方法没有任何关系。
}
方法1和2只是构造DBObject的不同方法,然后将DBObject传递给方法3,以便查询MongoDB实例并返回一组结果

编译器在方法1和2的返回语句中抱怨:

The method getByQuery(Object[]) is ambiguous for the type AbstractMongoDAO<T>
方法getByQuery(Object[])对于AbstractMongoDAO类型是不明确的
为什么会这样?如果我注释掉方法2,程序将编译。但是,如果我注释掉方法1,我会得到相同的编译器错误,但方法2会出现错误。

结果表明,这是Eclipse的问题,Eclipse报告这是一个错误,而实际上不是。我将提交一份bug报告


使用的Eclipse版本是基于Eclipse4.3的JavaEE构建,构建id:20130919-0819

试过我的编译器,没有任何问题。在方法2中,dbobjects必须更改为
dbobject
,但仅此而已。确保你的例子包含了重现问题的所有内容。哦,或者告诉我们您使用的Java版本。我尝试了从Java6到Java8的
javac
和eclipse编译器,得到了相同的结果。另一方面,java 1.5中引入了和varargs,并且必须对JVM如何选择在运行时执行的方法做出一些决定。您可以看看JVM是如何选择要执行的方法的。看看是的,我认为这可能只是一个Eclipse问题……代码对我来说也非常好,因此我对错误感到困惑。我到家后再确认。