Java 枚举的通用输入参数编译错误

Java 枚举的通用输入参数编译错误,java,generics,enums,factory,Java,Generics,Enums,Factory,我有一个Java枚举类,如下所示。我正在尝试将布尔型转换为B型。为此,我将factory与Generic一起使用。但是这里的getInstance()方法实现的代码编译成功,而getInstance1()方法实现失败 public enum FactoryEnum { BOOLEAN { @SuppressWarnings("unchecked") @Override public IConverter<ABoolean, BBo

我有一个Java枚举类,如下所示。我正在尝试将布尔型转换为B型。为此,我将factory与Generic一起使用。但是这里的
getInstance()
方法实现的代码编译成功,而
getInstance1()
方法实现失败

public enum FactoryEnum {

    BOOLEAN {

        @SuppressWarnings("unchecked")
        @Override
        public IConverter<ABoolean, BBoolean> getInstance() {// Compiled Successfully
            return new BooleanConverter();
        }


        @SuppressWarnings("unchecked")
        @Override
        public IConverter<ABoolean, BBoolean> getInstance(BBoolean bacStacDataType) { // Compilation Failed
            return new BooleanConverter(bacStacDataType);
        }

    };

    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance();

    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);


    // A Type
    public interface IADataType {

    }

    public class ABoolean implements IADataType {

    }

    // B Type
    public interface IBDataType {

    }

    public class BBoolean implements IBDataType {

    }

    //Converter to Convert Data From A to B
    public interface IConverter<M, R> {

    }

    public class BooleanConverter implements IConverter<ABoolean, BBoolean> {


        public BooleanConverter() {

        }

        public BooleanConverter(BBoolean boolean1) {

        }
    }
}
公共枚举工厂枚举{
布尔值{
@抑制警告(“未选中”)
@凌驾
已成功编译公共IConverter getInstance(){//
返回新的布尔值转换器();
}
@抑制警告(“未选中”)
@凌驾
公共IConverter getInstance(BBoolean bacStacDataType){//编译失败
返回新的BooleanConverter(数据类型);
}
};
公共抽象IConverter getInstance();
公共抽象IConverter getInstance1(R数据);
//A型
公共接口IADataType{
}
公共类ABoolean实现IADataType{
}
//B型
公共接口IBDataType{
}
公共类BBoolean实现了IBDataType{
}
//将数据从A转换为B的转换器
公共接口IConverter{
}
公共类BooleanConverter实现IConverter{
公共布尔转换器(){
}
公共布尔转换器(BBoolean boolean1){
}
}
}
你能帮我理解背后的原因吗?因为相同的泛型参数R在第一个方法中也被使用,在第一个方法中它被成功编译。但当它作为输入参数传递时,它失败了。

此签名:

public enum FactoryEnum {

    BOOLEAN {

        @SuppressWarnings("unchecked")
        @Override
        public IConverter<ABoolean, BBoolean> getInstance() {// Compiled Successfully
            return new BooleanConverter();
        }


        @SuppressWarnings("unchecked")
        @Override
        public IConverter<ABoolean, BBoolean> getInstance(BBoolean bacStacDataType) { // Compilation Failed
            return new BooleanConverter(bacStacDataType);
        }

    };

    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance();

    public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);


    // A Type
    public interface IADataType {

    }

    public class ABoolean implements IADataType {

    }

    // B Type
    public interface IBDataType {

    }

    public class BBoolean implements IBDataType {

    }

    //Converter to Convert Data From A to B
    public interface IConverter<M, R> {

    }

    public class BooleanConverter implements IConverter<ABoolean, BBoolean> {


        public BooleanConverter() {

        }

        public BooleanConverter(BBoolean boolean1) {

        }
    }
}
public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);
此签名:

public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);

有点昏昏欲睡,但是
R super-BBoolean
是否允许编译?我知道PEC,只是现在不想去推理。@Rogue考虑到你不能用下界指定类型变量,不。下界只能与通配符一起使用。啊,drats,你是对的。感谢您再次为我解开通配符/类型变量之间的界线。有点困了,但是
R super-BBoolean
允许编译吗?我知道PEC,只是现在不想去推理。@Rogue考虑到你不能用下界指定类型变量,不。下界只能与通配符一起使用。啊,drats,你是对的。再次感谢您为我解开通配符/类型变量之间的界线。