如何在java中定义泛型类的类

时间:2012-09-17 07:05:41

标签: java reflection

我有一个泛型类的类,我想获得泛型类的类。 我找到了一个包含以下代码的解决方案,但是当我使用ProGuard进行混淆时,我的应用程序停止工作。

还有其他方法吗?

public class comImplement<T> {

  private T _impl = null;

  public comImplement() {}

  public T getImplement() {

    if (_impl == null) {
      ParameterizedType superClass = 
        (ParameterizedType) getClass().getGenericSuperclass();
      Class<T> type = (Class<T>) superClass.getActualTypeArguments()[0];
      try {
        _impl = type.newInstance();
      } catch (Exception e) {
      }
    }
    return _impl;
  }
}

1 个答案:

答案 0 :(得分:2)

你不能得到超类的类型,除非它用另一个泛型类进行参数化,例如List或类似的东西。由于具体化,类型参数将在编译后丢失。您可能希望通过传递要创建的类的实例来解决问题,方法“getImplement,如下所示:

public T getImplement(Class<T> clz) {
   // do your initialization there
}

另一个可能会引起代码问题的问题 - 如果对象在多个线程之间共享,则会出现竞争条件。