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

在Java中,如何让子类决定使用哪种类型的参数类作为重写的方法参数?,java,generics,inheritance,overriding,functional-interface,Java,Generics,Inheritance,Overriding,Functional Interface,我有一个抽象类,在这个抽象类中,我希望有一个抽象方法,它接受一个使用者函数接口,并让子类决定应该参数化使用者的类型 我这样试过: public void show(消费者验证处理程序){ this.validationHandler=validationHandler; stage.show(); } 但在子类中,它表示它不是正确的重写: @覆盖 公共作废显示(消费者验证处理程序){ super.show(validationHandler); } 我的目标是能够在子实例上调用此方法,并在我

我有一个抽象类,在这个抽象类中,我希望有一个抽象方法,它接受一个使用者函数接口,并让子类决定应该参数化使用者的类型

我这样试过:

public void show(消费者验证处理程序){
this.validationHandler=validationHandler;
stage.show();
}
但在子类中,它表示它不是正确的重写:

@覆盖
公共作废显示(消费者验证处理程序){
super.show(validationHandler);
}
我的目标是能够在子实例上调用此方法,并在我将要传递的消费者lambda中提供正确的类型


您知道如何继续吗?

使您的基类成为泛型(使用泛型类型T),并使
show()
接受
消费者
(或
消费者使您的基类成为泛型(使用泛型类型T),并使
show()
接受
消费者
(或
消费者你试过
消费者吗?你能告诉我们消费者是关于什么的吗?你试过
消费者吗?你能告诉我们消费者是关于什么的吗?我想知道为什么
Consumer@Victor,Consumeri认为这是一个自定义抽象,而不是你根据你的假设指向@JB Nizet的抽象?也许我遗漏了一些命令论“隐性”这里有一个标准的消费者功能接口在Java库中。所以当OP谈论使用消费者功能接口时,可以安全地假设它是标准的。即使不是,消费者也是消费的东西,所以它是相似的。好吧…可能是因为我不习惯使用这个术语。对我来说,我它是这样的:如果你将使用你使用的超级层次结构下面的对象,如果你将使用你使用的扩展层次结构上面的对象。我将重新阅读关于消费者和生产者的更多信息,我想我忘了。我想知道为什么
Consumer@Victor,Consumeri认为这是一个定制的抽象,而不是您所指的@JB Nizet。。。基于你的假设?也许我遗漏了一些常见的“隐式”这里有一个标准的消费者功能接口在Java库中。所以当OP谈论使用消费者功能接口时,可以安全地假设它是标准的。即使不是,消费者也是消费的东西,所以它是相似的。好吧…可能是因为我不习惯使用这个术语。对我来说,我是这样的:如果你将使用超级等级以下的对象,如果你将使用扩展等级以上的对象。我将重新阅读更多关于消费者和生产者的信息,我想我忘了。。
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 {}