1 回答
TA贡献1982条经验 获得超2个赞
即使使用泛型方法,当它们被重写时,泛型也必须完全匹配。
可能不符合要求的一种方法是删除实现类的上限,例如
class B implements A {
@Override
<T> void X(T type1) { /* impl */ }
}
但是,如果需要上限,则在接口上使用类型参数表示上限。
interface A<U> {
<T extends U> void X(T t);
}
然后,可以在实现类中提供上限的类型参数。
class B implements A<Foo> {
@Override
public <T extends Foo> void X(T type1) { /* impl */ }
}
class C implements A<Bar> {
@Override
public <T extends Bar> void X(T type2) { /* impl */ }
}
但是,因为您可以调用的任何内容都可以调用 or ,也许这些方法不需要是泛型的。TFooBar
interface A<T> {
void X(T t);
}
class B implements A<Foo> {
@Override
public void X(Foo type1) { /* impl */ }
}
class C implements A<Bar> {
@Override
public void X(Bar type2) { /* impl */ }
}
添加回答
举报