扫二维码与项目经理沟通
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流
这篇文章主要介绍“Java类型擦除机制是什么”,在日常操作中,相信很多人在Java类型擦除机制是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java类型擦除机制是什么”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!
创新互联公司是一家专业提供濉溪企业网站建设,专注与成都网站设计、成都做网站、H5技术、小程序制作等业务。10年已为濉溪众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。Java泛型是JDK 5引入的一个特性,它允许我们定义类和接口的时候使用参数类型,泛型在集合框架中被广泛使用。类型擦除是泛型中最让人困惑的部分。
一个常见错误
package simplejava;import java.util.ArrayList;public class Q29 { public static void main(String[] args) { ArrayList
以上代码看起来是没问题的,因为String是Object的子类。然而,这并不会工作,编译不会通过,并提示如下错误:
The method accept(ArrayList
List
原因在于类型擦除。记住:Java的泛型机制是在编译级别实现的。编译器生成的字节码在运行期间并不包含泛型的类型信息。
在编译之后,List
通配符和有界通配符
List >表示List能包含任何类型的元素
public static void main(String args[]) { ArrayList
永远记住,泛型是一个编译时的概念。在这个例子中,由于我们不知道?,我们不能添加任何元素到al集合。如果想要添加的话,可以使用通配符。
List< Object > - List can contain Object or it's subtypeList< ? extends Number > - List can contain Number or its subtypes.List< ? super Number > - List can contain Number or its supertypes.
与数组比较
现在,我们知道了ArrayList
然而,数组却不同,它们在运行期间知道每个元素的类型且强制它们的元素为该类型,这叫reification。举个例子,Object[] objArray是String[] strArr的超类型。如果你尝试往存储整型的数组添加字符串对象,将会在运行期间得到一个ArrayStoreException异常。
到此,关于“Java类型擦除机制是什么”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!
我们在微信上24小时期待你的声音
解答本文疑问/技术咨询/运营咨询/技术建议/互联网交流