1
class Json<T>
{
  @SerializedName( "T's type here" ) 
  private final ArrayList<T> _bucket = new ArrayList<T>( 5 );
  ...
}

(可能であれば)実行時にクラスのジェネリックパラメーターを決定する方法を知りたいです。私が読んだことから、これはジェネリック型のサブクラスで可能ですが、型自体でそれを行う方法を見つけることができませんでした。これらのリンクにはいくつかのすばらしい情報がありますが、それが私が探しているものかどうかはわかりません。

http://blog.xebia.com/2009/02/07/acessing-generic-types-at-runtime-in-java www.artima.com/weblogs/viewpost.jsp?thread=208860

私が最終的に達成しようとしているのは、Gsonに上記の「_bucket」変数を「T」型のクラス名としてシリアル化させることです。

誰かが私を正しい方向に向けてくれたら幸いです。

4

2 に答える 2

6

与えられた例では、ジェネリック型は実行時に使用できません。ジェネリック型の情報は、コンパイル時に指定された場合、たとえばサブクラスを定義した場合にのみ、リフレクションを介して利用できますSomeTypeJson extends Json<SomeType>

List応急修理として、の内容を調べ、リフレクションを介して最も具体的な一般的なスーパークラスを見つけることで、ジェネリック型を推測できます。

于 2010-07-15T20:22:54.897 に答える
0

通常、このタイプをサブクラス化して具体的なタイプを指定すると、処理パッケージがタイプを適切に解決できるようになります。あるいは、多くのパッケージには、ある種の型参照(「型トークン」)の概念があります。これは、匿名クラスを使用して型情報を提供し、デシリアライザーが目的の型を正しく推測できるようにします。Gsonがどのクラスを使用しているかは覚えていませんが、このようなものが利用可能である必要があります。

あなたが持っている唯一のものがランタイムインスタンスである場合、空でないリストを持ち、そのタイプをチェックすることを除いて、あなたは運が悪いです(提案されているように)。

于 2010-08-03T17:29:56.783 に答える