在Java中,您可以使用泛型类型参数调用.class
。但是,您需要使用反射API来实现这一点。以下是一个示例:
import java.lang.reflect.Method;
public class GenericClassTest {
public static void main(String[] args) {
Class<?> clazz = getClassFromGenericType(new MyClass<>());
System.out.println("Class: " + clazz.getName());
}
public static <T> Class<?> getClassFromGenericType(MyClass<T> myClass) {
try {
Method method = myClass.getClass().getMethod("getType");
return (Class<?>) method.invoke(myClass);
} catch (Exception e) {
e.printStackTrace();
return null;
}
}
public static class MyClass<T> {
private final Class<T> type;
public MyClass() {
Type superclass = getClass().getGenericSuperclass();
if (superclass instanceof ParameterizedType) {
type = (Class<T>) ((ParameterizedType) superclass).getActualTypeArguments()[0];
} else {
throw new IllegalArgumentException("MyClass must be parameterized");
}
}
public Class<T> getType() {
return type;
}
}
}
在这个示例中,我们创建了一个名为MyClass
的泛型类,它具有一个getType
方法,该方法返回泛型类型参数的Class
对象。然后,我们使用反射API来获取MyClass
的泛型类型参数,并将其存储在type
字段中。最后,我们在main
方法中调用getClassFromGenericType
方法,该方法接受一个MyClass
实例,并返回其泛型类型参数的Class
对象。
请注意,这种方法可能会受到Java泛型擦除的影响,因此在某些情况下可能无法正常工作。在这种情况下,您可能需要使用其他方法来获取泛型类型信息,例如在运行时传递Class
对象作为参数。
领取专属 10元无门槛券
手把手带您无忧上云