java - 具有作为构造函数参数传递的泛型基类的枚举
问题描述
我正在尝试创建一个enum
其构造函数接受其基类是泛型类的对象。
我似乎无法从内部获取底层泛型类型,enum
但是,Object
返回而不是T
.
有没有办法做到这一点?
abstract public class Field<T> {
abstract public T get();
}
public class IntegerField extends Field<Integer> {
public Integer get() {
return 5;
}
}
public class StringField extends Field<String> {
public String get() {
return "5";
}
}
public enum Fields {
INTEGER (new IntegerField()),
STRING (new StringField());
private final Field<?> field; // <<--- I can't have Field<T>, enum's can't be generic. :(
<T> Fields(Field<T> field) {
this.field = field;
}
public <T> T get() {
return field.get(); // <<--- Returns Object, not T
}
}
解决方案
问题是枚举不能被一般类型化,所以即使你转换了 get call ( (T) field.get()
),你也不会有类型安全,因为它会同意任何赋值(你可以成功编译它,例如:)boolean b = Fields.INTEGER.get()
。
只需使用常量:
public final class Fields {
public static final Field<Integer> INTEGER = new IntegerField();
public static final Field<String> STRING = new StringField();
}
推荐阅读
- javascript - 如何在 Jquery 中使用 math.round 追加值
- python-3.x - 通过 scapy 配置 STP 协议
- ms-access - 选定的前景色未显示在 Access 组合框中
- python - 通过在 python 中合并其他两个蒙版来创建新的灰度蒙版图像
- php - errore SQLstate 23000 我无法将某些 JSON 值保存到我的数据库中
- asp.net-core-mvc - asp.net core 3.1 Identity - 当引用者是 Stripe 时,在 SignInAsync() 之后重定向到登录
- pytorch - pytorch和tensorflow之间的卷积层填充差异
- laravel - Laravel Hyn 多租户路由搜索所有数据库以获取价值
- python - 转换大型数据集,使其沿不同维度拆分为文件?
- php - 使用 laravel 上传不同类型的文件