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

Ombrelin:

我有一个抽象类,在其中我想有一个抽象方法,以一个Consumer函数接口作为参数,并让子类决定应使用哪种类型的参数消费者。

我尝试过这种方式:

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

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

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

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

您知道如何进行吗?

JB Nizet:

使您的基类为泛型(泛型类型为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 {}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何决定从父类或子类中调用子类中的重写方法?

在方法重写中为参数使用子类型

子类型作为重写方法的参数

Python如何确定将类型转换为哪种类型?

TypeScript子类:如何设置父类中定义的方法的参数类型和返回类型

如何创建子类,以便参数在Java中属于子类类型

我可以将哪种类型的参数传递给JAVA 8中的ToIntFunction功能接口

当参数在C ++中为父类类型时,如何调用子类的方法?

如何为lambda表达式获取特定类,例如方法参数中类型的子类

Java:类的类型参数扩展了自己的子类

您如何决定要使用哪种类型的数组?

在抽象方法中将子类用作参数和返回类型

如何动态定义可用作方法中的参数的类?

子类中的参数化超类方法和非参数化(混凝土类型)方法

Java在超类方法中返回不带通用参数的子类

如何在c ++中将父类用作继承的子类中的参数?

如何从可变种类的模板类包中的每种类型中恢复非类型名模板参数?

采用多种类型的参数并决定运行时行为的方法

子类中的 C# 方法是否可以具有不同的参数类型(从父类中的方法的参数类型派生)?

类型实参T扩展类不允许将类用作方法中的T参数

给定类型,您如何确定将其装箱为哪种类型?

如何在Kotlin中使用返回带有类型参数的子类型的方法创建类?

在Java子类中重写参数化的构造函数

将类的子类作为类型参数传递(类型参数是子类)

对子类中的子类方法使用超类参数

如何创建可以通过参数创建某种类型的子类型实例的Scala函数

哪种类型对方法的“自我”参数有效?

如何使用作为参数传递给方法的类类型来定义局部变量

在类中定义私有结构时,如何将其用作函数参数或返回类型?