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 に答える