1.数组提供了运行时的类型安全,但是没有编译时的类型安全检测;而泛型提供了编译时类型安全检查,运行时进行类型擦除。
如下代码:
Object[] longArray = new Long[1]; longArray[0]="I am test";
编译可以通过,但是运行的时候会抛出:java.lang.ArrayStoreException异常。
而如下代码:
List<Object> list = new ArrayList<Long>(); //Type mismatch: cannot convert //from ArrayList<Long> to List<Object> list.add("I am test");
编译时就通不过,因为泛型不支持子类化。
2.由于1的根本区别,因此数组和泛型不能很好的混合使用。
因此创建泛型数组(new List<E>[]),创建参数化类型数组(new List<String>[]),创建类型参数数组(new E())都是非法的。
3.题外话
像E,List<E>,List<String>这样的类型应该称作”不可具体化类型(non-reifiable)"。不可具体化类型可形象的理解为:其运行时表示法包含的信息比它编译时表示法包含的信息更少的类型。唯一可具体化的参数化类型是无限制的通配符类型,如List<?>和Map<?,?>。虽然不常用,但是创建无限制通配符类型数组是合法的。
4.补充
由于每次调用可变参数都会创建一个数组来存放可变的参数。如果这个数组的元素类型是不可具体化的,就会得到一个警告。对于这个警告的处理除了@SuppressWarning把它禁止之外,就是避免在API中混合使用泛型与可变参数。
最后当你获得一个创建泛型数组错误时,最好的解决办法就是优先使用集合类型List<E>或者Object[],而不是数组类型E[]。
参考文档:http://docs.oracle.com/javase/tutorial/java/generics/nonReifiableVarargsType.html
相关推荐
可以帮住那些对数组,泛型,字典表,哈希表用的不是很熟练的朋友作为参考
本文主要介绍了java数组、泛型、集合在多态中的使用及对比。具有很好的参考价值,下面跟着小编一起来看下吧
C#【泛型】实现的【通用】结构体转字节数组,包含网上收集的网页参考资料、非通用的【StructTest】工程、泛型实现的通用【Struct2BytesGenericType】工程。 VS2010编译运行。
本实例实现了泛型顺序队列和泛型循环队列的基本操作,并通过界面演示了队列中元素的变化,最后结合栈实现了回文字符串的判断,通过本实例可以充分掌握C#队列数据结构。
数组与泛型的关系还是有点复杂的,Java 中不允许直接创建泛型数组。本文分析了其中原因并且总结了一些创建泛型数组的方式。具有很好的参考价值。下面跟着小编一起来看下吧
servlet类向jsp传递带泛型数组。泛型为自定义的bean
泛型动态数组泛型动态数组
NULL 博文链接:https://kanglecjr.iteye.com/blog/2098497
c#实现对泛型数组排序
这使您可以创建能够使用相同代码循环访问数组和其他集合类型的泛型方法。此技术主要对读取集合中的数据很有用。IList<T> 接口不能用于在数组中添加或移除元素;如果试图在此上下文中调用 IList<T> 方法(如数组的 ...
主要介绍了Java封装数组之改进为泛型数组操作,结合实例形式详细分析了Java封装数组为泛型数组相关原理、操作技巧与注意事项,需要的朋友可以参考下
java 泛型详解 实例 class Point class Notepad,V>{ // 此处指定了...通配符、受限泛型、泛型无法向上转型、泛型接口、泛型方法、通过泛型方法返回泛型类型实例、使用泛型统一传入的参数类型、泛型数组、泛型的嵌套设置
泛型数组的创建
运用Java编程,自定义数组大小,解决在数组中加入元素,获取元素;按指定位置删除元素,修改元素;清空数组;数组的排序。
泛型集合与数组应用老师找学生 泛型集合 数组应用 老师找学生 C# 北大青鸟高老师
NULL 博文链接:https://xnn.iteye.com/blog/572501
主要介绍了java 用泛型参数类型构造数组详解及实例的相关资料,需要的朋友可以参考下
java泛型例子 内涵泛型类,泛型接口,泛型方法,泛型通配符使用,泛型上界下界,泛型数组,嵌套泛型等,很详细。放入myeclipse可用,已测试。
C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换C#2.0 泛型和强制类型转换
1.3 类型和变量 3 1.4 表达式 6 1.5 语句 8 1.6 类和对象 12 1.6.1 成员 12 1.6.2 可访问性 13 1.6.3 类型参数 13 1.6.4 基类 14 1.6.5 字段 14 1.6.6 方法 15 1.6.6.1 参数 15 1.6.6.2 方法体和局部变量 17 1.6.6.3...