1

我有一个泛型类型的类,我想获取泛型类型的类。我找到了使用以下代码的解决方案,但是当我使用 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;
  }
}
4

1 回答 1

2

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

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

您的代码可能会引发的另一个问题是竞争条件,以防对象在多个线程之间共享。

于 2012-09-17T07:13:51.490 回答