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

java 数组协变

时间:2016-08-01 15:48:00      阅读:214      评论:0      收藏:0      [点我收藏+]

标签:

在某些情况下,即使某个对象不是数组的基类型,我们也可以把它赋值给数组元素。这种属性叫做协变(covariance)。在下面的情况下可以使用协变:

数组是引用类型数组。

在赋值的对象类型和数组基类型之间有隐式转换或显式转换。

由于在派生类和基类之间总是有隐式转换的,因此总是可以将一个派生类的对象赋值给为基类声明的数组。

只有数组存在协变,此功能有利也有弊,相对于List 是支持泛型 不支持协变

class A{

}

class B extends A{

A[] array = new B[10];

A[] array = new A[10];

array[0] = new B();

此种创建数组 或者赋值成功即为数组的协变原因

对于List

List<A> list = new ArrayList<B>();(编译失败,泛型) 

正是因为数组支持协变,也就导致存在下面的隐患

Object[] array = new Integer[10];
 array[0] = "s String";

编译正常

运行则报异常

Exception in thread "main" java.lang.ArrayStoreException: java.lang.String
at com.me.test.Main.main(Main.java:9)

所以要合理的使用数组的协变

 

java 数组协变

标签:

原文地址:http://www.cnblogs.com/hxy520/p/5725619.html

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