ano*_*per 8 java generics interface object
我有一个名为A的界面:
public interface A {
void X(T t);
}
Run Code Online (Sandbox Code Playgroud)
然后,我有两个实现此接口的子类(B和C),但是它们每个都将不同的类型传递给X,比如说B传递了foo类型,C传递了bar类型:
public class B implements A {
@Override
public <T extends foo> void X(T type1)
}
public class C implements A {
@Override
public <T extends bar> void X(T type2)
}
Run Code Online (Sandbox Code Playgroud)
我在做错什么,为什么这没用?编译器不断告诉我“方法不会从其超类覆盖方法”。
提前致谢!
即使使用泛型方法,当它们被覆盖时,泛型也必须完全匹配。
一种可能不符合您要求的方法是删除实现类的上限,例如
class B implements A {
@Override
<T> void X(T type1) { /* impl */ }
}
Run Code Online (Sandbox Code Playgroud)
但是,如果需要上限,则在接口上用类型参数表示上限。
interface A<U> {
<T extends U> void X(T t);
}
Run Code Online (Sandbox Code Playgroud)
然后,您可以为实现类的上限提供type参数。
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 */ }
}
Run Code Online (Sandbox Code Playgroud)
但是,因为什么,你可以叫T你也可以打电话Foo或者Bar,也许方法并不需要是通用的。
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 */ }
}
Run Code Online (Sandbox Code Playgroud)