Если тип параметра сам по себе не является параметром типа, а является классом с конструктором по умолчанию без аргументов, вы можете сделать что-то вроде этого:
public class UserDefinedType {
private List<AnotherUserDefinedType> data;
public static void main(String[] args) throws Exception {
UserDefinedType inst = new UserDefinedType();
ParameterizedType type = (ParameterizedType) UserDefinedType.class.getDeclaredField("data").getGenericType();
Class<?> clazz = (Class<?>) type.getActualTypeArguments()[0];
Object obj = clazz.newInstance(); //this is of type "AnotherUserDefinedType"
}
}
Это довольно грубо, и вв этом случае ничего не получается без рефлексии (путем непосредственного создания AnotherUserDefinedType
).Может быть, вы можете раскрыть, какова ваша основная цель через все это?Возможно, есть более чистый подход, который мы могли бы предложить.
Если список сам параметризован параметром типа класса:
public class UserDefinedType<T> {
private List<T> data;
//...
}
, то это невозможно.Тип не будет доступен во время выполнения из-за удаления типа.
Так что в принципе это возможно только тогда, когда тип статически известен, и если тип статически известен, вам, вероятно, не нужно отражение.