从泛型实例中获取目标类名可以通过Java的反射机制来实现。以下是一个示例代码:
import java.lang.reflect.ParameterizedType;
import java.lang.reflect.Type;
public class GenericClass<T> {
private Class<T> targetClass;
public GenericClass() {
Type superClass = getClass().getGenericSuperclass();
if (superClass instanceof ParameterizedType) {
ParameterizedType parameterizedType = (ParameterizedType) superClass;
Type[] typeArguments = parameterizedType.getActualTypeArguments();
if (typeArguments.length > 0) {
targetClass = (Class<T>) typeArguments[0];
}
}
}
public Class<T> getTargetClass() {
return targetClass;
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
GenericClass<String> genericClass = new GenericClass<>();
Class<String> targetClass = genericClass.getTargetClass();
System.out.println(targetClass.getName()); // 输出 "java.lang.String"
}
}
在上述示例中,我们定义了一个泛型类GenericClass<T>
,通过反射获取泛型实例的目标类名。在构造函数中,我们首先通过getClass().getGenericSuperclass()
获取当前类的泛型父类,然后判断父类是否为ParameterizedType
类型。如果是,我们可以通过getActualTypeArguments()
方法获取泛型实例的类型参数数组,然后取第一个类型参数作为目标类。最后,我们提供了getTargetClass()
方法来获取目标类的Class
对象。
这种方法适用于获取直接继承泛型类的目标类名。如果存在多级继承关系,需要根据具体情况进行调整。
领取专属 10元无门槛券
手把手带您无忧上云