【问题标题】:how to know bounded type parameter on a class如何知道类的有界类型参数
【发布时间】:2011-05-20 10:24:24
【问题描述】:

我这样声明了一个类:

public class TestManagerImpl<T extends IParams> implements TestManager<T> {

  public TestManagerImpl() {}
  ...

}

我想知道,当为此类实例化对象时,是否可以从 IParams 中提取 T 的类型? 当我尝试在 getClass() 上进行测试时,它没有给我一个实现 ParameterizedType 的类型。

我读到我不能,因为类型擦除。 Angelika Langer's Java Generics FAQ。但我不确定这与我的问题有关,不是吗?

谢谢

【问题讨论】:

    标签: java generics


    【解决方案1】:

    您可以将Class 对象传递给构造函数。但我不知道这是否是好的做法。

    【讨论】:

    • 这是一种标准的做法。请参阅 Bloch 的 Effective Java 中的泛型章节的结尾
    • 私人决赛类 clazz;公共 TestManagerImpl(Class clazz) { this.clazz = clazz;我想避免它(因为它是一些由 spring 自动装配的 bean)。
    • 它不是一种反模式,而且通常是类知道它自己的泛型类型的唯一方法。
    【解决方案2】:

    类型擦除正是这里的问题。您无法在运行时发现 T 是什么,因为编译器不会保留该信息。查明的唯一方法是,您是否确实将 T 类型的对象传递给您的方法之一(@Nikita 建议使用一种这样的机制,但当然它依赖于使用您的类的任何人的合作)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-07-17
      • 2016-03-23
      • 2019-01-03
      • 1970-01-01
      • 2018-11-29
      • 1970-01-01
      • 2021-10-22
      • 1970-01-01
      相关资源
      最近更新 更多