Java:在运行时检索通用参数值

And*_*eaC 3 java generics

检索泛型类的泛型参数的运行时值的最佳方法是什么?例如:

public class MyClass<T> {

  public void printT() {
    // print the class of T, something like:
    // System.out.println(T.class.getName());
  }

}
Run Code Online (Sandbox Code Playgroud)

所以,如果我打电话

new MyClass<String>().printT() 
Run Code Online (Sandbox Code Playgroud)

它将打印"字符串"

cle*_*tus 6

你没有.由于类型擦除,信息(大部分)在运行时丢失.如果你真的需要这门课,你就是这样做的:

public class MyClass<T> {
  private final Class<T> clazz;

  public MyClass(Class<T> c) {
    if (c == null) {
      throw new NullPointerException("class cannot be null");
    }
    clazz = c;
  }

  public void printT() {
    System.out.println(clazz.getName());
  }
}
Run Code Online (Sandbox Code Playgroud)

然后你就可以访问它了.