This might be a stupid question, but I just saw a question asking how to create a Type variable for a generic type. The consensus seemed to be that you should have a dummy method returning that type, and then use reflection to get it (in this case he wanted Map<String, String>). Something like this :
public Map<String, String> dummy() { throw new Error(); }
Type mapStringString = Class.forName("ThisClass").getMethod("dummy").getGenericReturnType();
My question is, not having used reflection that much, couldn’t you just do something like:
Type mapStringString = new ParameterizedType() {
public Type getRawType() {
return Map.class;
}
public Type getOwnerType() {
return null;
}
public Type[] getActualTypeArguments() {
return new Type[] { String.class, String.class };
}
};
Would this work? If not, why not? And what are some of the dangers/problems if it does (besides being able to return some Type like Integer<String> which is obviously not possible.
Sure you could, and for most applications it would probably be sufficient.
However, using the first method, you get a more refined object. Let’s say for instance that you create an object
type1using the first method, andtype2using the second method. Thentype1.equals(type2)would return true (since the first method returns an object that properly implements the equals-method) buttype2.equals(type1)would return false (since in the second method, you haven’t overridden the equals-method, and are using the implementation fromObject).Same reasoning applies to other (sometimes useful methods) such as
toString,hashCodeetc. The second method does not provide useful implementations of these.