要从泛型类或方法的成员中获取T的类型,可以使用反射API。在Java中,可以使用Type
类和ParameterizedType
接口来获取泛型类型。以下是一个示例:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericExample<T> {
private final Class<T> clazz;
public GenericExample() {
Type superclass = getClass().getGenericSuperclass();
if (superclass instanceof ParameterizedType) {
ParameterizedType parameterized = (ParameterizedType) superclass;
Type type = parameterized.getActualTypeArguments()[0];
if (type instanceof Class) {
clazz = (Class<T>) type;
} else {
throw new IllegalArgumentException("Type parameter T must be a Class");
}
} else {
throw new IllegalArgumentException("GenericExample must be parameterized");
}
}
public Class<T> getType() {
return clazz;
}
public static void main(String[] args) {
GenericExample<String> example = new GenericExample<>();
System.out.println("Type of T is: " + example.getType().getName());
}
}
在这个示例中,我们创建了一个名为GenericExample
的泛型类,它具有一个类型参数T。在构造函数中,我们使用反射API来获取泛型类型T的实际类型。然后,我们将该类型存储在一个名为clazz
的Class
对象中,并提供一个getType
方法来获取该类型。
在main
方法中,我们创建了一个GenericExample<String>
实例,并使用getType
方法获取类型T的实际类型。在这种情况下,输出将是java.lang.String
。
这种方法可以用于获取泛型类或方法的成员中的任何类型参数。
领取专属 10元无门槛券
手把手带您无忧上云