我有一个泛型类的类,我想获得泛型类的类。 我找到了一个包含以下代码的解决方案,但是当我使用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;
}
}
答案 0 :(得分:2)
你不能得到超类的类型,除非它用另一个泛型类进行参数化,例如List或类似的东西。由于具体化,类型参数将在编译后丢失。您可能希望通过传递要创建的类的实例来解决问题,方法“getImplement,如下所示:
public T getImplement(Class<T> clz) {
// do your initialization there
}
另一个可能会引起代码问题的问题 - 如果对象在多个线程之间共享,则会出现竞争条件。