How to avoid unchecked-conversion-warning in Java, if you use legacy libraries?

generics, java, warnings

Solution

As others have said the warnings cannot be avoided except by suppressing them. The issue IMHO is that either you have to litter your code with annotations that apply to small scope or ignore them globally and risk errors.

IIRC there is a proposal to generate warnings where the raw types are being returned instead of at the call.

Meanwhile, I think the best approach is to use a wrapper method so that the warnings are limited to a single place, where it is safe to ignore them:

class NoWarn {
  public static Map<String, String[]> getParameterMap(ServletRequest r) 
  {
    @SuppressWarnings("unchecked")
    Map<String, String[]> result = r.getParameterMap();
    return result;
  }
}

Note This answer was edited with a comment that annotations cannot be inside method bodies. That is incorrect, the above is syntactically correct. I have reverted the change.

Problem

I like the generics-feature in java and use it often. But I have a problem, if I use libraries that aren't yet aware of generics. An example are servlets. If you use `ServletRequest.getParameterMap()` the result will be a raw map, but it includes only `String` as keys and `String[]` as values. So I want to assign it to a `Map<String, String[]>`. But for this assignment I get an warning. How can I avoid this warning with the language, not by simply suppressing the warning with the `@SuppressWarnings` annotation.

Original source