1 回答
TA贡献1851条经验 获得超3个赞
这个签名:
public abstract <M extends IADataType, R extends IBDataType> IConverter<M, R> getInstance1(R data);
意味着该方法的实现必须采用任何R(在范围内)。
您正在尝试实现它以采用特定的 R。
那根本行不通,因为它不是覆盖等效的。
此外,您应该非常小心这些@SuppressWarnings("unchecked")
注释。仅抑制您可以推理的警告实际上是安全的;这些不是。
如果您希望枚举值具有不同的类型,则不能使用枚举。最终,枚举值只是包含类中的静态最终字段。
因此,只需定义一个类,然后您就可以使用类级类型变量来约束特定类型。
public class FactoryClass<M extends IADataType, R extends IBDataType> {
public static final FactoryClass<ABoolean, BBoolean> BOOLEAN = new FactoryClass<ABoolean, BBoolean>() {
@Override
public BooleanConverter getInstance() {
return new BooleanConverter();
}
@Override
public BooleanConverter getInstance(BBoolean bacStacDataType) {
return new BooleanConverter(bacStacDataType);
}
};
public abstract IConverter<M, R> getInstance();
public abstract IConverter<M, R> getInstance1(R data);
}
添加回答
举报