我试图覆盖扩展另一个接口的接口中的方法声明。这两个接口都使用泛型。根据Java教程,这应该是可能的,但该示例不使用泛型。当我尝试实现它时,编译器显示以下错误(我已经替换了名称,因为某些代码不是我自己的。):
InterfaceExtended中的myMethod(T) 在接口中与myMethod(T)发生冲突; 两种方法都有相同的擦除, 但是没有超越对方。
代码如下所示:
public interface Interface<T>
{
public void myMethod(T x);
}
public interface ExtendedInterface<T> extends Interface<T>
{
public void myMethod(T x);
}
如果有人建议如何改变这一点以使其可以接受,或者说明导致问题的原因,我将非常感激。
谢谢!
badPanda
答案 0 :(得分:4)
你想要myMethod的重载版本吗?那么你不应该使用T两次,但是像这样:
public interface Interface<T>
{
public void myMethod(T x);
}
public interface ExtendedInterface<T, V> extends Interface<T>
{
public void myMethod(V x);
}
现在有可能有这样的事情:
class MyClass implements ExtendedInterface<String, Integer> {
public void myMethod(String x) { .. }
public void myMethod(Integer x) { .. }
}
编辑:有趣的是,这也有效(虽然没用):
class MyClass implements ExtendedInterface<String, String> {
public void myMethod(String x) { .. }
}
答案 1 :(得分:1)
这确实有效。如果您的类使用两种不同的泛型类型实现两次相同的接口,则可能会出现问题。
例如:
class MyClass implements Interface<String>, ExtendedInteface<Integer>{
}
例如this code仅在第三个类失败。
这是我在IntelliJ X上的消息: