views:

1813

answers:

5

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. But for this assignement I get an warning. How can I avoid this warning with the language, not by simply suppressing the warning with the SuppressWarnings-annotation.

+1  A: 

I don't think you can. The warning will appear unless you suppress it, or filter it from your IDE's warnings list.

Rich Seller
+2  A: 

How can I avoid this warning with the language, not by simply suppressing the warning with the SuppressWarnings-annotation.

The annotation is the way to avoid the warning with the language. There is no other way.

Michael Borgwardt
+7  A: 

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;
  }
}
Hemal Pandya
I hope that the proposal you mentioned will be implemented fast (Java7?), because that would clearly solve my problem.
Mnementh
+6  A: 

The cleanest thing you can do is to encapsulate the conversion from legacy to generic code and suppress the warning only there.

E.g. you could put a generic facade on your legacy library, though this might not always be worthwhile.

starblue
+1 Write a boilerplate generified wrapper around the legacy API and slap warning suppressions on that.
skaffman
A: 

I had the same problem, i just turned off all generic warnings and im happy :) You could also turn off serialVersionUID warning since many people dont use serialVersionUID.

in Eclipse - Window/Perferences/Java/Compiler/Errors/Warnings and turn off all Generic types.

P.S. Many bad warnings make you ignore all the warnings and some might be usefull.

01
I use warnings as a possibility for improvement. I don't get many warnings, because I fix them all on the way. Normally the unchecked-conversion-warnings are very helpful to find code-parts that can be improved. But in this case I don't see a way without suppressing this warning.
Mnementh
you are lucky, i now have 61 warnings in project, even unused imports warning. i wont fix it since they are not in my code, so Ive closed the Problems Tab and just look for yellow tags in my source code.
01
I fix warnings also in code of others in the same project. If problems occur we discuss the rules for the checkers.
Mnementh