本篇文章好程序员为大家一下java为什么不支持泛型数组,希望对大家有所帮助。
![](/upload/ad_content/xuanchuantu-29.jpg)
成都创新互联公司专注为客户提供全方位的互联网综合服务,包含不限于
网站设计制作、成都网站建设、齐齐哈尔网络推广、小程序定制开发、齐齐哈尔网络营销、齐齐哈尔企业策划、齐齐哈尔品牌公关、搜索引擎seo、人物专访、企业宣传片、企业代运营等,从售前售中售后,我们都将竭诚为您服务,您的肯定,是我们大的嘉奖;
成都创新互联公司为所有大学生创业者提供
齐齐哈尔建站搭建服务,24小时服务热线:18980820575,官方网址:www.cdcxhl.com
public class Pair { public void info( ) { System.out.println("I am Pair"); } } |
Pair[] p=new Pair[10];//该句编程环境会提示错误,连编译都不能通过
Java为什么使用泛型?
首先,从一个问题讲起——Java为什么使用泛型?引入泛型的目的之一就是为了提高程序的安全性,减少错误发生,还是用一段更形象的代码来讲吧。请看下面代码
public class Test { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(new Pair()); //list.add(5); Pair p=(Pair)list.get(0); p.info(); } } |
运行上面代码是不会有任何问题的,但是我们稍加改动,即放开被注释掉的那行代码,并将索引改为1,即变为如下代码
public class Test { public static void main(String[] args) { ArrayList list=new ArrayList(); list.add(new Pair()); list.add(5); Pair p=(Pair)list.get(1); p.info(); } } |
程序将发生java.lang.ClassCastException,很显然,是因为我们把int类型强制转为Pair类型发生的。以上代码是用引入泛型代码之前的方式写的,在引入泛型后,java集合都已经重写以迎合泛型。引入泛型的目的之一就是为了消除这种隐患,于是,泛型的一个原则被引了出来——如果一段代码在编译时没有提出“未经检查的转换”警告,则程序在运行时不会引发ClasscastException异常。
我们再用泛型的方式来重写一遍上面的代码,如下
![好程序员Java学习路线分享java为什么不支持泛型数组](/upload/otherpic17/1666397-20190910162449636-836478157.png)
编译环境会提示错误,编译都通不过,于是这便在编译阶段就避免了这种隐患的发生。泛型能够保证类型的统一。
为什么不能创建泛型数组?
这跟数组的一个特点有关,看代码
public class Father {
}
public class Son extends Father{
}
public class Test { public static void main(String[] args) { Father[] son=new Son[10]; } } |
数组是允许把一个子类数组赋给一个父类数组变量的!这会发生什么!?
public class Test { public static void main(String[] args) { Pair[] p = new Pair[10];//实际这句是不能通过编译的,会提示错误 Object[] oj = p; } } |
如果允许创建泛型数组,将能在数组p里存放任何类的对象,并且能够通过编译,因为在编译阶段p被认为是一个Object[ ],也就是p里面可以放一个int,也可以放一个Pair,当我们取出里面的int,并强制转换为Pair,调用它的info()时会怎样?
java.lang.ClassCastException!这就违反了泛型引入的原则。所以,Java不允许创建泛型数组。
有人可能会说,即使我用泛型ArrayList list=new ArrayList( ),我不是照样可以取出里面的对象,使用显式的强制类型转换吗?比如,Father f=(Father)list.get(0),实际操作你将会发现,你依旧会被提示错误,编译不过,这并不违背泛型引入的原则。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:好程序员Java学习路线分享java为什么不支持泛型数组-创新互联
当前URL:
http://bjjierui.cn/article/depooj.html