yit*_*zih 7 java generics inheritance interface
我有一个抽象超类和两个扩展它的类
public abstract class MyAbstract {}
public class A extends MyAbstract {}
public class B extends MyAbstract {}
Run Code Online (Sandbox Code Playgroud)
我有一个接口,它有一个方法,该方法采用 MyAbstract 的子类作为其参数
public interface MyInterface {
<T extends MyAbstract> void someMethod(T param);
}
Run Code Online (Sandbox Code Playgroud)
然后我有一个实现该接口的类
public class AnotherClass implements MyInterface {
@Override
<T extends MyAbstract> void someMethod(T param) {}
}
Run Code Online (Sandbox Code Playgroud)
但我只想允许MyAbstract在该方法中使用 的特定子类。
以下是我到目前为止尝试过的一些事情:
<T extends A> void someMethod(T param); //doesn't override the method
void someMethod(A param); //doesn't override the method
Run Code Online (Sandbox Code Playgroud)
无论如何,是否可以让接口采用通用参数,并且该接口的实现者指定该参数的更受限制的版本,或者这根本不可能?
是的,您使接口本身实际上采用通用参数:
public interface MyInterface<T extends MyAbstract> {
void someMethod(T param);
}
Run Code Online (Sandbox Code Playgroud)
然后你可以限制它的使用位置:
public class AnotherClass<T extends A> implements MyInterface<T> {
@Override
public void someMethod(T param) {}
}
Run Code Online (Sandbox Code Playgroud)
或者:
public class AnotherClass implements MyInterface<A> {
@Override
public void someMethod(A param) {}
}
Run Code Online (Sandbox Code Playgroud)