如果 您的
AbstractSpringMVCControllerTestbind 子类
T在编译时是可能的。也就是说,你有类似
public class DerpControllerTest extends AbstractSpringMVCControllerTest<DerpController> { }而不是
public class AnyControllerTest<T> extends AbstractSpringMVCControllerTest<T> { }我猜你可能是前者。在这种情况下,在运行时会
T从
Class对象中删除for
的类型
AbstractSpringMVCControllerTest,但是
Classfor对象
DerpControllerTest确实
提供了一种方法来知道是什么
T,因为它是
T在编译时绑定的。
以下类演示如何访问的类型
T:
超级java
import java.lang.reflect.ParameterizedType;public abstract class Super<T> { protected T object; @SuppressWarnings("unchecked") public Class<T> getObjectType() { // This only works if the subclass directly subclasses this class return (Class<T>) ((ParameterizedType) getClass().getGenericSuperclass()).getActualTypeArguments()[0]; }}java
public class Sub extends Super<Double> {}Test.java
public class Test { public static void main(String...args) { Sub s = new Sub(); System.out.println(s.getObjectType()); // prints "Class java.lang.Double" }}


