Java泛型名称clash,具有相同的擦除


问题内容

我有超一流的Foo。还有一个扩展它的类Bar。

public class Bar extends Foo

在Foo中的功能:

protected void saveAll(Collection<?> many)

酒吧功能:

public void saveAll(Collection<MyClass> stuff) {
   super.saveAll(stuff);
}

出现错误:

 Name clash: The method saveAll(Collection<MyClass>) of type Bar has the same erasure as saveAll(Collection<?>) of type Foo but does not override it.

我究竟做错了什么?


问题答案:

您正在saveAll使用不兼容的类型覆盖该方法。也许您想做类似的事情:

public class Bar extends Foo<MyClass>

功能在 Foo<E>

protected void saveAll(Collection<E> many)

和功能在酒吧:

public void saveAll(Collection<MyClass> stuff) {
   super.saveAll(stuff);
}