Java 枚举的通用输入参数编译错误
我有一个Java枚举类,如下所示。我正在尝试将布尔型转换为B型。为此,我将factory与Generic一起使用。但是这里的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
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,你是对的。再次感谢您为我解开通配符/类型变量之间的界线。