我已经定义了一个在其构造函数中采用类型参数的对象:
public DynParameterDaoImpl(Class<T1> type) {
super();
...
}
实施工作做得很好
DynParameterDaoImpl myVar = new DynParameterDaoImpl(Atype.class);
有没有办法在类型为列表的情况下执行此操作。以下不起作用..
DynParameterDaoImpl myVar = new DynParameterDaoImpl(List<Atype>.class);
答案 0 :(得分:2)
没有
List<AType>
是一种类型,但它不是类,因为类型擦除可确保List<X>
与List<Y>
相同的类表示所有引用类型X
和{ {1}}。
例如,
Y
编译器拒绝List<String> strings = new ArrayList<String>(); // Legal
boolean b = strings instanceof List<Number>; // Compiler Rejects
检查,因为虚拟机没有足够的信息可以区分instanceof
和List<String>
。
如果可以获得像List<Number>
这样的非类类型的类值,那么反射等价
List<String>
会通过,这将是对类型安全的无声违反。
答案 1 :(得分:2)
让我引用 Effective Java 。
规则有两个小的例外,你不应该在新代码中使用原始类型,这两个原因都源于在运行时擦除泛型类型信息的事实。您必须在类文字中使用原始类型。规范不允许使用参数化类型(尽管它允许数组类型和基本类型)换句话说,
List.class
,String[].class
和int.class
都是合法的,但{{{ 1}}和List<String>.class
不是。