Java1.5引入的泛型是一个比较大的进步,让人用的也很爽.但是java的泛型是基于类型擦除,也就是只在编译期才有泛型的存在,在运行时根本没有泛型什么事. 这也造成了泛型不能支持下面这些情况,而这些是在C++里面是都得到了支持的.
- 不支持New操作
- class SomeContainer<E>
- {
- E createContents()
- {
- return new E();
- }
- }
分析: 因为是类型擦除的,如果支持的话,这里只能new 一个真正Object对象了, 如果在调用处java隐含的强制转型,肯定会抛出错误.
如果你是想生成一个泛型对应的对象,可以用下面的这种办法. 这种办法传入了对应的Class对象,通过反射找到对应的默认构造函数去生成的对象,所以可以完成上面没办法完成的.
- private static class SomeContainer<E>
- {
- E createContents(Class<E> clazz)
- {
- return clazz.newInstance();
- }
- }
- 不支持静态成员变量
- public class StaticMember<T> {
- static T member;
- }
分析:因为static变量会被所有实例共享,如果泛型支持多种类型的时候,强制转换类型肯定会抛出异常.
- 不支持直接New泛型相关的数组
- public class GenericArray<T> {
- // this one is fine①
- public T[] notYetInstantiatedArray;
- // causes compiler error②
- public T[] array = new T[5];
- // causes compiler errorshan③
- List<String>[] lsa = new List<String>[10];
- }
②处不被支持很好理解,泛型类型都不支持new, 泛型数组肯定也不行了.
③处不被支持我没理解顺畅, 下面链接处说如果支持会可能抛出异常这个违背了泛型的原则.但是使用通配符泛型数组也会抛出异常.
http://docs.oracle.com/javase/tutorial/extra/generics/fineprint.html
相关推荐
泛型类、泛型方法、泛型接口、泛型委托 泛型类、泛型方法、泛型接口、泛型委托
泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合泛型集合解释的非常好泛型集合泛型集合
Struts2、Hibernate、Spring整合的泛型DAO (本人评价: 代码开发效率提高30% 代码出错率减少70%) 对于大多数开发人员,系统中的每个 DAO 编写几乎相同的代码到目前为止已经成为一种习惯。虽然所有人都将这种重复...
C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型C#,泛型
【Flutter】Dart 泛型 ( 泛型类 | 泛型方法 | 特定类型约束的泛型 ) https://hanshuliang.blog.csdn.net/article/details/114059611 博客源码快照
C#的泛型C#的泛型
泛型学习和泛型接口和泛型经典示例
在.NET FCL为我们提供了很多...结论:如果在C#2.0版本以上,尽量使用泛型集合类,而不使用非泛型集合类。因为,1. 泛型编程是从c#2.0开始才被.net支持的。2.泛型集合在性能和类型安全方面优于非泛型集 合。 。。。。
泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法泛型和泛型集合类用法
泛型是Java SE 1.5的新特性,泛型的本质是参数化类型,也就是说所操作的数据类型被指定为一个参数。这种参数类型可以用在类、接口和方法的创建中,分别称为泛型类、泛型接口、泛型方法。 Java语言引入泛型的好处是...
c#泛型类、泛型方法、泛型接口、泛型委托
Java泛型编程指南.pdf 此文章译自SUN的泛型编程指南
泛型的知识,请自己参考吧。主要介绍java泛型的知识。
C++/CLI泛型编程概览 CLI泛型介绍 CLI泛型适用对象 CLI泛型约束 CLI泛型与C++模板 讲座总结 Q&A
反射和泛型是一种重要的解决途径。 此代码是一个生成泛型对象的类。 比如: Pool<Point> pool = new Pool(){}; Point p = pool.get(x, y); //在此构造Point对象 ... pool.put(p); 希望能帮助那些为查找泛型构造器、...
Java Generics and Collections 英文版,详细描述java 泛型技术
详细的介绍了Java是伪泛型的原因,介绍了类型擦除的内容等。
C#泛型,非泛型实现枚举功能,通过实现接口方法或者使用迭代器块实现
这是一个使用JAVA实现的泛型编程,分为两部分,第一部分创建泛型类,并实例化泛型对象,得出相加结果。 第二部分用户自行输入0--4,选择要进行的加减乘除运算或退出,再输入要进行运算的两个数,并返回运算结果及...
深入理解java泛型,包括类名泛型的定义,方法泛型定义,泛型的返回