我是仿制药的新手,如果我能解决以下问题,我将不胜感激:
我有这个父类:
public class Parent<K, V> {
public void f(K key,V value){}
}
然后我有这个孩子班:
public class Child<K,V> extends Parent<K,LinkedList<V>> {
@Override
public void f(K key,V value) {}
}
嗯,希望是Child.f
会覆盖Parent.f
,但不幸的是编译器不喜欢这里发生的事情而且给了我:
Name clash: The method f(K, V) of type Child<K,V> has the same erasure as f(K, V) of type
Parent<K,V> but does not override it
我之前在不同的背景下看到过这个错误,但我不确定为什么会出现这个错误。有没有办法避免它?
提前致谢。
答案 0 :(得分:2)
您使用V代表两种不同的含义。在孩子中将V重命名为W应该如下所示。这里父亲中的V是LinkedList&lt; W&gt;
public class Child<K,W> extends Parent<K,LinkedList<W>> {
@Override
public void f(K key,LinkedList<W> value) {}
}
顺便说一句:它真的必须是一个具体的类LinkedList,不能是List。
编辑:也许您在特定情况下需要将您想要定义为通用定义的内容混淆。 e.g。
public class Child<K,V> extends Parent<K,V> {
@Override
public void f(K key, V value) {}
}
Child<String, LinkedList<String>> child = new Child<String, LinkedList<String>>();
child.f("key", new LinkedList<String>());
在这里,您有一个孩子,您已定义为使用LinkedList,但并非所有Child'ren都必须使用LinkedLists。