Java:在运行时检索泛型参数值

标签 java generics

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

public class MyClass<T> {

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

}

所以如果我打电话

new MyClass<String>().printT() 

它将打印“字符串”

最佳答案

你不知道。由于 type erasure该信息(大部分)在运行时丢失。如果你真的需要这门课,这就是你要做的:

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());
  }
}

然后您就可以访问它了。

关于Java:在运行时检索泛型参数值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1570954/

相关文章:

java - hadoop mapreduce teragen FAIL_CONTAINER_CLEANUP

generics - 为什么不能从构造函数推断出 Kotlin 父类(super class)型参数?

java - Java 中类型不兼容的错误是什么?

c# - 如何从实际类型推断 TResult?

java - 类型转换 float 组

java - 当类型为通配符时,如何将泛型结果用作泛型参数?

Java - 处理文本文件以识别由空格或符号分隔的每个字符串

java - 将 Morphia 与 Java EE 结合使用

基于 C# 泛型的对象到对象映射器问题

c# - System.Collections.Generic.KeyNotFoundException 与 Microsoft Bot Framework