Can I call .class on a generic type in Java?
generics, java
Solution
You can't do it quite like this, but you can achieve your overall aim using the same approach as Guice does with `TypeLiteral`. If you're using Guice already, I suggest you use that directly - otherwise, you might want to create your own similar class.
Essentially, the idea is that subclasses of a generic type which specify type arguments directly retain that information. So you write something like:
TypeLiteral literal = new TypeLiteral<List<String>>() {};
Then you can use `literal.getClass().getGenericSuperclass()` and get the type arguments from that. `TypeLiteral` itself doesn't need to have any interesting code (I don't know whether it does have anything in Guice, for other reasons).
Problem
I was wondering if there is a way in Java to do something like ``` Class c = List<String>.class; Class c2 = List<Date>.class; ``` I need something like this to create a map that stores the class name (with generic type) and the corresponding object which I can later lookup. For example, ``` Map<Class, Object> dataMap = new HashMap<Class, Object>(); dataMap.put(c, listOfStrings); dataMap.put(c2, listOfDates); ``` Is this not possible because of type erasure during runtime ?