在 Java 中,如何让子 class 决定将哪种类型的参数 class 用作重写的方法参数?
In Java, how to let child class decide of which type parameter class use as overridden method argument?
我有一个抽象 class,其中我希望有一个抽象方法接受一个 Consumer 功能接口作为参数,并让子 class 决定哪个类型应该参数化消费者。
我这样试过:
public void show(Consumer<?> validationHandler) {
this.validationHandler = validationHandler;
stage.show();
}
但在子 class 中,它表示它不是正确的覆盖:
@Override
public void show(Consumer<Protection> validationHandler) {
super.show(validationHandler);
}
我的目标是能够在子实例上调用此方法,并在我将传递的消费者 lambda 中提供正确的类型。
你知道如何进行吗?
使你的基础 class 泛型(具有泛型类型 T),并使 show()
接受 Consumer<T>
(或 Consumer<? super T>
)。使子class 扩展 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 {}
我有一个抽象 class,其中我希望有一个抽象方法接受一个 Consumer 功能接口作为参数,并让子 class 决定哪个类型应该参数化消费者。
我这样试过:
public void show(Consumer<?> validationHandler) {
this.validationHandler = validationHandler;
stage.show();
}
但在子 class 中,它表示它不是正确的覆盖:
@Override
public void show(Consumer<Protection> validationHandler) {
super.show(validationHandler);
}
我的目标是能够在子实例上调用此方法,并在我将传递的消费者 lambda 中提供正确的类型。
你知道如何进行吗?
使你的基础 class 泛型(具有泛型类型 T),并使 show()
接受 Consumer<T>
(或 Consumer<? super T>
)。使子class 扩展 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 {}