Java数组与泛型
2015-07-03 16:23
369 查看
Java中不能创建泛型数组,例如不能这样写:
[java] view plaincopy
ArrayList<String>[] as = new ArrayList<String>[10];
原因是:
Java中的泛型并不像C++那样会在编译时实例化成具体的类,或者说Java中的泛型是“伪泛型”。对于一个泛型,程序无法获得它的具体的参数类型,也就是说:
[java] view plaincopy
ArrayList<String> a = new ArrayList<String>();
声明a之后,你没法检查a的类型是ArrayList<String>还是ArrayList<Integer>,只能知道a是ArrayList的一个实例化对象。如下代码:
[java] view plaincopy
System.out.println(a.getClass().toString());
System.out.println(Arrays.toString(a.getClass().getTypeParameters()));
得到的输出信息是:
class java.util.ArrayList
[E]
可以看出,获得a的具体类型的企图落空了。
泛型的这种机制在Java中叫做擦除。即,泛型的具体类型信息会被擦除到它的原生类型或者类型边界。类型边界是Java泛型的另一个特性:
[java] view plaincopy
class Temp<T extends Par>
{...}
Temp是泛型的名字,Par是边界类的名字。在定义一个泛型的时候,可以通过extends关键词来指定T的导出类型(T的父类),擦除的时候,会擦除到边界,即Par。
而Java中的数组必须知道它所持有的确切类型。
数组名是一个标识符,是一个指向堆栈中的数组对象的引用。如果是基本数据类型的数组,那么这个数组对象中存放着length等信息以及各个元素的值,如果是引用类型的数组,那么这个数组对象中存放着length等信息以及各个元素的引用。数组在定义时就必须有确切的类型,所有存入数组的元素都必须转化成数组的类型。所以Java中泛型和数组可谓水火不相容。
版权声明:本文为博主原创文章,未经博主允许不得转载。
[java] view plaincopy
ArrayList<String>[] as = new ArrayList<String>[10];
原因是:
Java中的泛型并不像C++那样会在编译时实例化成具体的类,或者说Java中的泛型是“伪泛型”。对于一个泛型,程序无法获得它的具体的参数类型,也就是说:
[java] view plaincopy
ArrayList<String> a = new ArrayList<String>();
声明a之后,你没法检查a的类型是ArrayList<String>还是ArrayList<Integer>,只能知道a是ArrayList的一个实例化对象。如下代码:
[java] view plaincopy
System.out.println(a.getClass().toString());
System.out.println(Arrays.toString(a.getClass().getTypeParameters()));
得到的输出信息是:
class java.util.ArrayList
[E]
可以看出,获得a的具体类型的企图落空了。
泛型的这种机制在Java中叫做擦除。即,泛型的具体类型信息会被擦除到它的原生类型或者类型边界。类型边界是Java泛型的另一个特性:
[java] view plaincopy
class Temp<T extends Par>
{...}
Temp是泛型的名字,Par是边界类的名字。在定义一个泛型的时候,可以通过extends关键词来指定T的导出类型(T的父类),擦除的时候,会擦除到边界,即Par。
而Java中的数组必须知道它所持有的确切类型。
数组名是一个标识符,是一个指向堆栈中的数组对象的引用。如果是基本数据类型的数组,那么这个数组对象中存放着length等信息以及各个元素的值,如果是引用类型的数组,那么这个数组对象中存放着length等信息以及各个元素的引用。数组在定义时就必须有确切的类型,所有存入数组的元素都必须转化成数组的类型。所以Java中泛型和数组可谓水火不相容。
版权声明:本文为博主原创文章,未经博主允许不得转载。
相关文章推荐
- eclipse快捷键大全
- IntelliJ IDEA 14.x 创建工作空间与多个Java Web项目
- Missing artifact javax.jms:jms:jar: Missing artifact com.sun.jdmk Missing artifact com.sun.jmx:jmxri
- 黑马程序员学习日记 Eclipse常用设置
- 谈话Java在ThreadLocal理解类
- web.xml中通过contextConfigLocation的读取spring的配置文件
- Java常用正则表达式
- eclipse下的jsp:The user operation is waiting for "Building workspace" to complete
- Eclipse修改默认Author
- 使用 Spring Boot 快速构建 Spring 框架应用
- ios下使用RSA算法加密与java后台解密配合demo
- CXF+Spring 搭建的WebService
- 使用IntelliJ IDEA,gradle开发Java web应用步骤
- Lombok 安装、入门 - 消除冗长的 java 代码
- Java中A\t+/不能自动补全的解决办法
- JAVA8新特性
- 阐述Spring以及其各项功能
- Struts2拦截器解决乱码问题
- java timer 定时任务
- Java 读取csv文件,经测可用