【发布时间】:2019-12-19 02:52:45
【问题描述】:
我有以下结构
public interface A <T extends B> {
List<String> getVals();
void setVals(List<String> vals);
T getContext();
void setContext(T context);
}
public abstract class C <T extends B> implements A {
protected T context;
//Some code
}
public class Regex <T extends B> extends C <T> {
public List<String> getVals() {
//Some code
}
public void setVals(List<String> vals) {
//Some code
}
}
问题是,当我编译时,我收到以下错误:
Regex.java:[53,15]
name clash: setVals(java.util.List<java.lang.String>) in Regex and setVals(java.util.List<java.lang.String>) in A have the same erasure, yet neither overrides the other
这是为什么?如果我要求 Intellij 为我“进行覆盖”,它会用 setVals(List vals) 替换 setVals(List vals)。
public void setVals(List vals) {
//Some code
}
不应该是,“方法的定义完全一样”?
在此先抱歉我缺乏接口知识
【问题讨论】:
-
您的
C扩展了原始类型A,这将导致各种问题。您的意思是C改为扩展A<T>吗? -
换句话说:应该是
public abstract class C<T extends B> implements A<T>而不是implements A -
你们都提到了同样的事情,而且,ofc,这是正确的方法。现在它修复了。太棒了!