Array.asList()函数的使用问题【JAVA】

来源:百度知道 编辑:UC知道 时间:2024/05/28 16:21:43
现在有以下三个类:
class Snow{}
class Power extends Snow{}
class light extends Power{}
当使用:
List<Snow> sonw1=Array.asList(new Power());
可以成功,应该是Power向上转型为Snow了吧
但是使用:
List<Snow> sonw2=Array.asList(new Light());
时就出错了,说是需要List<Snow>,但是Light不是最终也是从Snow继承的吗?应该可以跟Power一样向上转型啊

求教!
上面Array应该是Arrays....

无语

为什么在我的机器上编译。 连第一个引用都通不过呢?
C:\shiyan123.java:19: 不兼容的类型

找到: java.util.List<Power>
需要: java.util.List<Snow>

似乎根本就无法这样引用。

我试了第2次,似乎可以这样:
List sonw1=Arrays.asList(new Power());
sonw1.add(Arrays.asList(new light()));
也就是说,1开始声明1个list的时候,压根就不声明类型。```直接 List xxx=xxx;

而这样做是可以的,但是却会产生 一个异常···UnsupportedOperationException。
无语。

根据刚才的经验,本人再次试验,原因肯定就处在Arrays.asList上。
我刚才试了一下,可以这样: List<Snow> sonw1=new ArrayList<Snow>();
sonw1.add(new Power());
sonw1.add(new light());
也就是说,本身容器类是支持向上转型的。
而List<snow> snow1=Arrays.asList();问题应该就出在这1句上面。
API上面这样写asList的:返回一个受指定数组支持的固定大小的列表。
将一个指定数组的固定大小的list列表,也就是先前编译时候下面给的提示:
找到: java.util.List<Power>
需要: java.util.List<Snow>
也就是说,先前可能是:将一个List<Power>类的容器对象,赋给了一个List<Sonw>的引用(也就是大概相当于这样):List<Snow> xx=new ArrayList<Power>();因为这中