我有带有通用方法的通用类
class Foo<T> {
public <E> E execute() {
return null;
}
}
有人可以向我解释为什么:
class Bar extends Foo {
public <E> E execute() {
return null;
}
}
产生错误
Bar中的execute()与Foo中的execute()冲突;两种方法都具有相同的擦除,但是都不能覆盖另一种方法
这没关系
class Bar extends Foo<Object> {
public <E> E execute() {
return null;
}
}
答案 0 :(得分:1)
在第一个示例中,您使用Foo的原始类型,因此Foo的方法签名为public Object execute()
。这与Bar
中的通用版本冲突。实际上,这很容易重现而无需继承,就像这样:
class Foo
{
public <E> E execute() { return null; }
public Object execute() { return null; }
}
在第二个示例中,您没有使用Foo
的原始类型,因此execute
方法的签名是完全匹配的。在这种情况下,这只是一个简单的方法覆盖。因此,您可能应该对其进行注释。
class Bar extends Foo<Object> {
@Override
public <E> E execute() {
return null;
}
}