2013-11-01 103 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。

相关问题