I am starting use Java generic. I have a Parameter interface and its ParameterImpl concrete class. The T will be a Float, Long, Integer or String.
public interface Parameter<T extends Comparable<T>> {}
public class ParameterImpl<T extends Comparable<T>> implements Parameter<T> {}
In other classes, saying public class A
and public class B
:
class variable of type Parameter can be declared as:
Parameter parameter
orParameter<?> parameter
but notParameter <T> parameter
.//warning, should be parameterized Parameter p; //no warning Parameter<?> p2; //error Parameter<T> p3; //warning, should be parameterized Map<String, Parameter> pMap; //no warning Map<String, Parameter<?>> pMap2; //error Map<String, Parameter<T>> pMap3;
Then should I use the Wildcard everywhere when asked? or just ignore the warning and use the non-parameterized version?
there are three options for the methods:
public <T extends Comparable<T>> Parameter<T> getParameter2(Map<String, Parameter<T>> map, String key) { return null; } public Parameter <?> getParameter (Map<String, Parameter<?>> map, String key){ return null; } public Parameter getParameter3(Map<String, Parameter> map, String key) { return null; }
similar as the class variable cases, the last one has warning about the parameterized. Which way I should go?