将字符串转换为枚举而不发出警告

时间:2014-08-03 02:12:07

标签: java generics enums

我正在使用反射来编写某种反序列化器,并且正在使用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调用中收到编译错误。

有没有办法在没有泛型警告的情况下获得相同的结果(或以更好的方式写出来?)

1 个答案:

答案 0 :(得分:1)

  

有没有办法在没有泛型警告的情况下获得相同的结果(或以“更好”的方式写出来)?

没有。由于您没有准确地告诉编译器所涉及的类型是什么,因为原始类型的使用,它无法确定在运行时会发生什么,因此必须警告您。

您所能做的就是取消警告

@SuppressWarnings({ "unchecked", "rawtypes" })