Get instance of generic class from an enum attribute in Java
我的类中有一个枚举,它包含一个类属性,因此:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | public enum DatEnum { CONSTANT_ONE(ClassOne), CONSTANT_TWO(ClassTwo); private Class<? extends UpperBoundClass> classAttribute; private DatEnum(Class<? extends UpperBoundClass> classAttribute) { this.classAttribute = classAttribute; } public <T extends UpperBoundClass> T getInstance() { UpperBoundClass instance = classAttribute.newInstance(); return instance; } } |
但我在第一行得到警告:
Unchecked cast from capture#4-of ? extends UpperBoundClass to T
在吸气剂的第二行:
Unchecked cast from UpperBoundClass to T
到目前为止,代码是有效的,但是我真的想摆脱警告,并且更好地理解问题的实质所在。
1 2 3 4 | public <T extends UpperBoundClass> T getInstance() { UpperBoundClass instance = classAttribute.newInstance(); return instance; } |
此代码实际上并不返回
最终结果:你会得到一个警告。只要使用
如果您将方法更改为以下内容,那么您将看到(在调用代码中)不严格类型安全的使用站点,因为它们具有特定的子类:
1 2 3 | public UpperBoundClass getInstance() { return classAttribute.newInstance(); } |
或者,可以提供
1 2 3 4 | public <T extends UpperBoundClass> T getInstance(Class<T> type) { UpperBoundClass instance = classAttribute.newInstance(); return type.cast(instance); // verifies type-safety } |
但是这样做没有什么意义,因为调用方可以自己调用
您正在与
相关阅读:为什么JavaEnm文字不能具有泛型类型参数?
首先,您的
事实上,你总是可以使用