我正在使用反射来编写某种反序列化器,并且正在使用Java泛型。我有:
Object object
,java.lang.reflect.Field field
)的字段的引用(field.getType().isEnum()
返回true
),String string
)我可以将字符串解析为枚举,并使用以下代码将其设置在对象中:
Class<Enum> enumClass = (Class<Enum>) field.getType();
field.set(object, Enum.valueOf(enumClass, string));
然而,这会生成编译警告,因为Enum是泛型类型。
如果我添加泛型(Enum<?>
),我会在Enum.valueOf调用中收到编译错误。
有没有办法在没有泛型警告的情况下获得相同的结果(或以更好的方式写出来?)
答案 0 :(得分:1)
有没有办法在没有泛型警告的情况下获得相同的结果(或以“更好”的方式写出来)?
没有。由于您没有准确地告诉编译器所涉及的类型是什么,因为原始类型的使用,它无法确定在运行时会发生什么,因此必须警告您。
您所能做的就是取消警告
@SuppressWarnings({ "unchecked", "rawtypes" })