【问题标题】:Java reflection, get the name of a generic class parameterJava反射,获取泛型类参数的名称
【发布时间】:2016-04-18 22:15:21
【问题描述】:

我想获取一个类的泛型参数的名称。 例如:

public class A<B> {
...
}

这个类我想取B类的名字。喜欢:

A<Solution> var = new A<Solution>();

我想有一种方法可以在 A 方法中的某处使用字符串“Solution”

如果你有任何想法我在这里:)

谢谢!

【问题讨论】:

    标签: java class generics reflection parameters


    【解决方案1】:

    您需要将Class 实例作为构造函数参数传入:

    class A<B> {
      private final Class<B> clazz;
    
      A(Class<B> clazz) {
        this.clazz = clazz;
      }
    
      String getName() {
       return clazz.getSimpleName();
      }
    }
    
    A<Solution> var = new A<>(Solution.class);
    

    【讨论】:

    • 也可以通过子类化A来获取。有关示例,请参见 Guava 的 TypeToken 或 Jackson 的 TypeReference
    • @shmosel 如果B 需要通用,这将是一个合适的解决方案。您会考虑将其添加为另一个答案吗?
    • 无论哪种方式,您都需要有一个明确的类型,例如,new A&lt;Solution&gt;() {}。它只是更简洁一些,尤其是当您需要捕获多个类型参数时。
    • @shmosel 是的。但这是一种不同的方法(它是继承方法,而我的是组合方法),因此您应该将其添加为替代答案。
    • 我现在没有耐心写出来。随意这样做。
    猜你喜欢
    • 1970-01-01
    • 2012-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-08-28
    相关资源
    最近更新 更多