我正在尝试实现一个新的MessageBodyReader / Writer组合,我在阅读器部分遇到了麻烦。鉴于以下声明
public class Jsr367EnumProvider<T extends Enum> implements
MessageBodyReader<T>,
MessageBodyWriter<T>
有效,但有警告称Enum
是未加工的。所以为了解决它,我试图放入Enum<?>
但是,这会在我的readFrom
方法
@Override
public T readFrom(final Class<T> type,
final Type genericType,
final Annotation[] annotations,
final MediaType mediaType,
final MultivaluedMap<String, String> httpHeaders,
final InputStream inputStream) throws IOException,
WebApplicationException {
// TODO support other encodings using the HTTP Header
try (Scanner s = new Scanner(inputStream).useDelimiter("\\A")) {
return (T) Enum.valueOf(type, s.next());
}
}
这也警告了一个未经检查的演员阵容。有没有办法解决这个问题而不诉诸@SupressWarnings
?
答案 0 :(得分:0)
不,没有。回想一下您尝试投射的方法的签名:
Enum.valueOf(Class<T> enumType, String name)
严格说明您提供的代码,您无法摆脱警告。所以要压制它,但要遵循良好的做法,例如 Effective Java 2nd Edition中规定的内容:第24项:消除未经检查的警告:
- 消除所有未经检查的警告。
- 如果您无法消除警告,并且您可以证明引发警告的代码是类型安全的,那么(并且只有这样)才会使用
@SuppressWarning("unchecked")
注释来抑制警告。- 始终在尽可能小的范围内使用
SuppressWarning
注释。- 每次使用
@SuppressWarning("unchecked")
注释时,请添加注释,说明为何可以安全使用。