2

私は次の機能を持っています

編集:intをクラスLongに変更しました

protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx) 

List<Long>2番目の引数としてクラスを渡すにはどうすればよいですか?

合格できますList<Long>.classが、機能しませんか?

4

2 に答える 2

8

型消去とは、パスすることしかできないことを意味しますList.class

リンクされたドキュメントから:

ジェネリック型がインスタンス化されると、コンパイラーは型消去と呼ばれる手法でこれらの型を変換します。これは、コンパイラーがクラスまたはメソッド内の型パラメーターと型引数に関連するすべての情報を削除するプロセスです。型消去により、ジェネリックスを使用するJavaアプリケーションは、ジェネリックスの前に作成されたJavaライブラリおよびアプリケーションとのバイナリ互換性を維持できます。

たとえば、は、raw型と呼ばれるBox<String>型に変換されます。raw型は、型引数のないジェネリッククラスまたはインターフェイス名です。Boxこれは、ジェネリッククラスが実行時に使用しているオブジェクトのタイプを見つけることができないことを意味します。次の操作はできません。

public class MyClass<E> {
  public static void myMethod(Object item) {
    // Compiler error
    if (item instanceof E) {
        ...
    }
    E item2 = new E();       // Compiler error
    E[] iArray = new E[10];  // Compiler error
    E obj = (E)new Object(); // Unchecked cast warning
  }
}

太字で示されている操作は、コンパイラがコンパイル時に実際の型引数(typeパラメータで表されるE)に関するすべての情報を削除するため、実行時には意味がありません。

于 2012-05-09T06:28:08.050 に答える
0

intに渡すことはできませんListTここはから拡張する必要があるためObjectです。

Integerから延長されますObjectが、そうではありませんint

于 2012-05-09T06:25:31.017 に答える