Когда вы говорите
когда я создал класс, содержащий этот метод
Полагаю, вы имеете в виду, когда создаете объект такого типа, например:
foo = new ContainerClass<DvQuantity>();
В этом случае из-за стирания невозможно восстановить тип DvQuantity
.
Однако, если вы создаете класс , передавая параметр типа суперклассу, как это
class DvQuantityContainerClass extends ContainerClass<DvQuantity> {...}
...
foo = new DvQuantityContainerClass();
Или, короче, встроенный анонимный подкласс (который выглядит почти как первый пример, но с небольшим, но важным отличием):
foo = new ContainerClass<DvQuantity>(){};
Затем вы можете восстановить параметр типа, поскольку вы восстанавливаете параметр типа, используемый для расширения суперкласса во время выполнения. К сожалению, сама Java не предоставляет простого способа получить тип метода DvQuantityContainerClass.setOtherReferenceRanges
с заполненным T
. Для этого я написал gentyref , чтобы выполнить расширенное отражение универсальные типы:
Method m = DvQuantityContainerClass.class.getMethod("setOtherReferenceRanges", List.class);
// this will return List<ReferenceRange<DvQuanity>>, like you are lookingn for
return GenericTypeReflector.getExactParameterTypes(m, DvQuantityContainerClass.class)