[在Java中,如何让子类决定其类型类型参数类用作重写的方法参数?

问题描述 投票:0回答:1

我有一个抽象类,在其中我想有一个抽象方法,将一个Consumer函数的接口作为参数,并让子类决定应该对消费者进行参数化的类型。

我尝试过这种方式:

    public void show(Consumer<?> validationHandler) {
        this.validationHandler = validationHandler;
        stage.show();
    }

但是在子类中,它表示这不是正确的替代:

    @Override
    public void show(Consumer<Protection> validationHandler) {
        super.show(validationHandler);
    }

我的目标是能够在子实例上调用此方法,并具有我将通过的使用者lambda中提供的正确类型。

您知道如何进行吗?

感谢n前进

java generics inheritance overriding functional-interface
1个回答
1
投票

[使您的基类具有泛型(泛型类型为T),并使show()接受Consumer<T>(或Consumer<? super T>。使子类扩展为BaseClass<Protection>

class BaseClass<T> {
    public void show(Consumer<T> validationHandler) { //  or Consumer<? super T>
    }
}

class SubClass extends BaseClass<Protection> {
    @Override
    public void show(Consumer<Protection> validationHandler) { //  or Consumer<? super Protection>
        super.show(validationHandler);
    }
}

class Protection {}
© www.soinside.com 2019 - 2024. All rights reserved.