Существует богатая литература по этому вопросу, и некоторые люди недовольны текущим состоянием, некоторые говорят, что на самом деле это приманка и в этом нет реальной необходимости. Вы можете прочитать обе ссылки, я нашел их довольно интересными.
publicabstractclassGenericClass<T> { privatefinal TypeToken<T> typeToken = newTypeToken<T>(getClass()) { }; privatefinalTypetype= typeToken.getType(); // or getRawType() to return Class<? super T>
public Type getType() { return type; }
publicstaticvoidmain(String[] args) { GenericClass<String> example = newGenericClass<String>() { }; System.out.println(example.getType()); // => class java.lang.String } }
Некоторое время назад я опубликовал несколько полноценных примеров, включая абстрактные классы и подклассы, здесь.
Примечание: для этого требуется создать экземпляр подклассаGenericClass, чтобы он мог корректно привязать параметр типа. В противном случае он просто вернет тип как T.