覆盖方法,以便参数需要子类

时间:2016-09-01 22:41:58

标签: java generics inheritance interface

我有一个抽象的超类和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

是否有接口采用泛型参数,该接口的实现者指定该参数的更受限制的版本,或者这根本不可能?

1 个答案:

答案 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) {}
}