我有一个抽象的超类和2个扩展它的类
public abstract class MyAbstract {}
public class A extends MyAbstract {}
public class B extends MyAbstract {}
我有一个接口,它有一个方法,将MyAbstract的子类作为其参数
public interface MyInterface {
<T extends MyAbstract> void someMethod(T param);
}
然后我有一个实现该接口的类
public class AnotherClass implements MyInterface {
@Override
<T extends MyAbstract> void someMethod(T param) {}
}
但我只想允许在方法中使用MyAbstract
的特定子类。
到目前为止,我尝试了几件事:
<T extends A> void someMethod(T param); //doesn't override the method
void someMethod(A param); //doesn't override the method
是否有接口采用泛型参数,该接口的实现者指定该参数的更受限制的版本,或者这根本不可能?
答案 0 :(得分:3)
是的,您使界面本身实际上采用了通用参数:
public interface MyInterface<T extends MyAbstract> {
void someMethod(T param);
}
然后你可以限制使用它:
public class AnotherClass<T extends A> implements MyInterface<T> {
@Override
public void someMethod(T param) {}
}
或者:
public class AnotherClass implements MyInterface<A> {
@Override
public void someMethod(A param) {}
}