Java 责任链设计原则中的泛型编译器错误

Java Generics Compiler Error in Chain of Responsibility design principle

public abstract class AbstractExecutor<PARAM, RET> {

private AbstractExecutor<?, ?> nextExecutor;
    
public abstract RET execute(PARAM param);

public void executeAll(PARAM par) {
    System.out.println("Executing..");
    RET ret= execute(par);
     if(this.nextExecutor!=null){
         System.out.println("Executing.." + this.getClass());
            this.nextExecutor.executeAll(ret);
        }
}

public AbstractExecutor<?, ?> setNextExecutor(AbstractExecutor<?,?> next){
    this.nextExecutor = next;
    return this.nextExecutor;
}}

任何人都可以帮我解决这段代码,为什么我在这里错了“this.nextExecutor.executeAll(ret);” ?我正进入(状态 “类型 AbstractExecutor 中的方法 executeAll(capture#4-of ?) 不适用于参数 (RET)” 但无法理解这里出了什么问题? 如何更正此问题?

在您的代码中,PARAMRET 是 [type] 参数,即它们不是实际类型。

方法executeAll本质上是一个递归方法,即它调用自身,方法execute返回的值作为[递归调用]方法executeAll的参数。因此 RET 必须与 PARAM 相同或它的子集。因此,下面的代码编译通过。

public abstract class AbstractExecutor<PARAM, RET extends PARAM> {
    private AbstractExecutor<PARAM, RET> nextExecutor;

    public abstract RET execute(PARAM param);

    public void executeAll(PARAM par) {
        System.out.println("Executing..");
        RET ret = execute(par);
        if (this.nextExecutor != null) {
            System.out.println("Executing.." + this.getClass());
            this.nextExecutor.executeAll(ret);
        }
    }

    public AbstractExecutor<PARAM, RET> setNextExecutor(AbstractExecutor<PARAM, RET> next) {
        this.nextExecutor = next;
        return this.nextExecutor;
    }
}