java - 如何获取 List<aType> 的类型?

标签 java

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

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> 相同的类表示适用于所有引用类型XY .

例如,

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/

相关文章:

java - 在 Java 中查找某个日期在一个月中第 n 次出现的日期

java - 使用 Java 连接到 C++ 程序

java - Facade 模式 - 返回原始对象或修改后的原始对象

Java程序分别计算单词和空格,但该程序显示: Exception in thread "main" java. lang.StringIndexOutOfBoundsException:

java opengl : glDrawElements() with >32767 vertices

java - For循环输出特定模式

java - 面临与 Firebase Cloud Firestore 相关的问题

java - hibernate JPA 2.1 : OUT REF CURSOR in position other than first?

java - FirebaseInstanceId.getInstance().getInstanceId() 在哪些情况下会失败?

java - DynamoDB - 如何检查现有表是否为空或非空