重写方法,使参数需要子类

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)

无论如何,是否可以让接口采用通用参数,并且该接口的实现者指定该参数的更受限制的版本,或者这根本不可能?

And*_*eas 6

是的,您使接口本身实际上采用通用参数:

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)