私は次の機能を持っています
編集:intをクラスLongに変更しました
protected <T> ApiResponse<T> getApiResponse(Object obj, Class<T> clasx)
List<Long>
2番目の引数としてクラスを渡すにはどうすればよいですか?
合格できますList<Long>.class
が、機能しませんか?
型消去とは、パスすることしかできないことを意味します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
)に関するすべての情報を削除するため、実行時には意味がありません。
int
に渡すことはできませんList
。T
ここはから拡張する必要があるためObject
です。
Integer
から延長されますObject
が、そうではありませんint
。