我定义了一个对象,该对象在其构造函数中采用类型参数:
public DynParameterDaoImpl(Class<T1> type) {
super();
...
}
实例化效果很好
DynParameterDaoImpl myVar = new DynParameterDaoImpl(Atype.class);
有没有办法以列表的类型来做到这一点。以下内容不起作用..
DynParameterDaoImpl myVar = new DynParameterDaoImpl(List<Atype>.class);
最佳答案
没有。
List<AType>
是一个类型,但它不是一个类,因为类型删除确保 List<X>
由与 List<Y>
相同的类表示适用于所有引用类型X
和Y
.
例如,
List<String> strings = new ArrayList<String>(); // Legal
boolean b = strings instanceof List<Number>; // Compiler Rejects
编译器拒绝 instanceof
检查,因为没有足够的信息可供虚拟机区分 List<String>
和List<Number>
.
如果有可能获得像 List<String>
这样的非类类型的类值,则反射等效
Class<? extends List<String>> stringListClass = strings.getClass(); // Illegal
Class<? extends List<Number>> numberListClass = List<Number>.class; // Illegal
boolean b = numberListClass.isAssignableFrom(stringListClass);
会通过,这将无声地违反类型安全。
关于java - 如何获取 List<aType> 的类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22614653/