Я знаю, что этот вопрос старый, но лучший ответ неправильный.
Вы можете легко получить общие типы с помощью отражений. Вот пример:
private Map<String, Integer> genericTestMap = new HashMap<String, Integer>();
public static void main(String[] args) {
try {
Field testMap = Test.class.getDeclaredField("genericTestMap");
testMap.setAccessible(true);
ParameterizedType type = (ParameterizedType) testMap.getGenericType();
Type key = type.getActualTypeArguments()[0];
System.out.println("Key: " + key);
Type value = type.getActualTypeArguments()[1];
System.out.println("Value: " + value);
} catch (Exception e) {
e.printStackTrace();
}
}
Это даст вам вывод:
Key: class java.lang.String
Value: class java.lang.Integer