いろいろあってnew T()できないなーと悩んでました。 2014/05/18

javaです。ジェネリクスです。


いろいろあって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

: