码迷,mamicode.com
首页 > 编程语言 > 详细

JAVA为什么不让创建泛型数组

时间:2014-09-09 12:54:38      阅读:240      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   io   java   ar   2014   art   问题   

首先,我觉得定制java标准的那些人完全可以让java创建泛型数组;只是他们权衡了一下,觉得还是禁止了的好,一下就说说我的揣测:

如果我们写如下代码是没有问题的:

List<String> a = new ArrayList<String>();
那么为嘛到了数组就不行呢:

List<String>[] arr = new ArrayList<String> [10];
我们先来看看数组变量和普通变量的区别:数组变量arr和普通变量a都在栈中,但是呢!arr[0]在堆中。所以呢?所以我们有下面一个例子:

List<String>[] arr = new ArrayList<String> [10];
Object[] orr = arr;
List<StringBuffer> buf = new ArrayList<StringBuffer> ();
orr[0] = buf;
List<String> str = arr[0];
String val = str.getValue();
可以发现,堆中的第0个元素是List<StringBuffer>了,但是arr[0]还是指向了它,如果是普通变量,这是不可能的;所以,即便是引入了泛型,也不是安全的;最后一句,由于编译器会加上string转化,造成ClassCastException;泛型本来就是为了安全,如果不能保证数组的安全,为啥还有多此一举呢?

本文主要参照:http://www.blogjava.net/deepnighttwo/articles/298426.html



JAVA为什么不让创建泛型数组

标签:style   blog   http   io   java   ar   2014   art   问题   

原文地址:http://blog.csdn.net/topc0o0der/article/details/39141349

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!