Из-за стирания типа вы определенно не можете "определить", что такое T
- его даже не существует во время выполнения. Самое близкое, что вы могли бы получить, это проверить значения в defValue
(если оно имеет значения) и получить класс элементов там.
Class<?> tType = defValue.get(0).getClass();
if (Boolean.class.isAssignableFrom(tType)) { //...
Редактировать
Что касается вашего мышления об использовании отражения типа getTypeArguments()
и т. Д. Они предоставляют данные только для объявленных типов, но не реальных типов. Так, например, если вы получили дескриптор объекта Method
и назвали getTypeParameters()
, вы просто получили бы массив, содержащий объект типа, представляющий T
, а не фактический тип, который T
представляет в некотором конкретном вызов времени выполнения.