如何获取List <type>的类型?</type>

时间:2014-03-24 16:08:36

标签: java

我已经定义了一个在其构造函数中采用类型参数的对象:

public DynParameterDaoImpl(Class<T1> type) {
        super();
        ...
    }

实施工作做得很好

DynParameterDaoImpl myVar = new DynParameterDaoImpl(Atype.class);

有没有办法在类型为列表的情况下执行此操作。以下不起作用..

DynParameterDaoImpl myVar = new DynParameterDaoImpl(List<Atype>.class);

2 个答案:

答案 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 检查,因为虚拟机没有足够的信息可以区分instanceofList<String>

如果可以获得像List<Number>这样的非类类型的类值,那么反射等价

List<String>

会通过,这将是对类型安全的无声违反。

答案 1 :(得分:2)

让我引用 Effective Java

  

规则有两个小的例外,你不应该在新代码中使用原始类型,这两个原因都源于在运行时擦除泛型类型信息的事实。您必须在类文字中使用原始类型。规范不允许使用参数化类型(尽管它允许数组类型和基本类型)换句话说,List.classString[].classint.class都是合法的,但{{{ 1}}和List<String>.class不是。