【问题标题】:Override method so that a parameter requires a subclass覆盖方法,使参数需要子类
【发布时间】:2023-04-01 15:22:01
【问题描述】:

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

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

【问题讨论】:

  • 你的问题体现了用词的矛盾。根据定义,具有不同参数的方法不可能被覆盖。

标签: java generics inheritance interface


【解决方案1】:

是的,你让接口本身实际上采用了泛型参数:

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

【讨论】:

    猜你喜欢
    • 2013-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-12-04
    • 2019-04-08
    相关资源
    最近更新 更多