[英]Where is the type information stored in Java Generics?
对于通用 class,类型信息存储在哪里以及如何在运行时强制执行。 例如,如果我创建一个 List 实例为: List<String> strList = new List<String>();
,这意味着 'strList' 只能与 String 类型一起使用。 但这些信息在哪里存储或执行? 是在 class 元数据级别还是在实例级别? 如果我创建另一个 List 类型的实例: List<Long> longList = new List<Long>();
java如何确保'strList'只能处理String,'longList'只能处理Long。 我对通用方法有同样的问题。 每次使用不同类型调用泛型方法时,类型检查如何工作?
但这些信息在哪里存储或执行?
它存储在源代码中,并在编译器中强制执行。
类型检查很容易被破坏,导致运行时失败:
List<String> strList = new ArrayList<String>();
List<Integer> intList = (List<Integer>) (List<?>) strList;
intList.add(0);
String str = strList.get(0); // ClassCastException.
然而,这并没有被无声地破坏:你会得到一个未经检查的强制转换警告,告诉你编译器不能确定你是否在做不安全的事情。 避免这种未经检查的强制转换(最好),或者对代码进行推理以确保不安全的强制转换实际上是安全的,这都是您的负担。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.