ここで静的型のみに関心があると仮定すると、次のトリックが役立つ場合があります。
@SuppressWarnings("unchecked")
public static <T>
Class<T> appropriateClass(T... args) {
return (Class<T>) args.getClass().getComponentType();
}
Class<ArrayList<String>> c = appropriateClass();
ArrayList<String> list = foo(c);
実際、私はそのトリックをあまり誇りに思っていません。しかし、あなたはそれを試してみたいかもしれません.
テストする場合:
System.out.println(c); // prints "class java.util.ArrayList"
したがって、 のような醜いキャストと同等(Class<ArrayList<String>>) (Class<?>) ArrayList.class
です。
ArrayList<String>
実行時と実行時に実際に異なるトークンが必要な場合は、Sean Patrick Floyd が言及しArrayList
た手法を使用する必要があります。TypeToken