いろいろあってnew T()できないなーと悩んでました。
2014/05/18
java
ジェネリクス
javaです。ジェネリクスです。
いろいろあってnew T()できないなーと悩んでました。
それで、なんとか、トリックのようですが、がんばればTの型とれるかなーと思ったのですが、やはり、ちょっとだめなケース。
結果
- Javaのジェネリクスで,T.class や new T() ができず悩んだ話 (型パラメータのインスタンス化に関し、フレームワーク設計からケーススタディ) - 主に言語とシステム開発に関して
- 型パラメータつきクラスの中から指定された型パラメータを知る方法 - Skirnirnismal
いろいろあってnew T()できないなーと悩んでました。
それで、なんとか、トリックのようですが、がんばればTの型とれるかなーと思ったのですが、やはり、ちょっとだめなケース。
package generics;
import java.util.ArrayList;
import java.util.List;
public class Test01 {
public static void main(String[] args) {
new Test01().a();
}
void a(){
Aaa aaa = new Aaa();
aaa.list();
List<String> list = aaa.list();
}
public class Aaa {
<T> List<T> list(){
Hoe<T> hoe = new Hoe<T>();
System.out.println(hoe.getType());
// ダイアモンド
return new ArrayList<>();
}
}
public class Hoe<E> {
private Class<E> type;
public Hoe(E... e) {
@SuppressWarnings("unchecked")
Class<E> type = (Class<E>) e.getClass().getComponentType();
this.type = type;
}
public Class<E> getType() {
return type;
}
}
}
結果
class java.lang.Object class java.lang.Object
: