Intellij Idea - 模糊的方法调用

StK*_*ler 4 java generics intellij-idea

我使用Intellij Idea遇到了与Java相关的奇怪错误.

所以有这样的界面:

<T> void save(T aEntity, DbTransaction dbTransaction, Class<T> clazz);
<T> void save(Collection<T> aEntities, DbTransaction dbTransaction, Class<T> clazz);
Run Code Online (Sandbox Code Playgroud)

当我尝试编译下一个代码时:

@SuppressWarnings("unchecked")
@Override
public void save(Collection<T> aEntities, DbTransaction aDbTransaction) {
    baseDao.save(aEntities, aDbTransaction, getClass((T) aEntities.toArray()[0]));
}
Run Code Online (Sandbox Code Playgroud)

我收到下一个编译错误:

reference to save is ambiguous, both method <T>save(T,DbEntityHelper.DbTransaction,java.lang.Class<T>) in xzc.dao.IBaseDao and method <T>save(java.util.Collection<T>,DbEntityHelper.DbTransaction,java.lang.Class<T>) in xzc.dao.IBaseDao match
Run Code Online (Sandbox Code Playgroud)

你有什么想法 ?提前感谢您的帮助.

Pet*_*rey 6

您有两种类型T,它们不能假设它们是相同的.T可能是Collection<T>第二种方法,也可能是第一种方法T.

您可以使用

baseDao.<T>save(....
Run Code Online (Sandbox Code Playgroud)

要么

baseDao.<Collection<T>>save(....
Run Code Online (Sandbox Code Playgroud)

弄清楚它应该是哪一个.使它们具有T相同的名称对编译器没有帮助,可能只是令人困惑.