如下:
import java.util.*;class Snow{}class Powder extends Snow{}
class Crusty extends Snow{}
class Slush extends Snow{}
class Light extends Powder{}
class Heavy extends Powder{}public class AsListInference {
public static void main(String[] args){
List<Snow> snow1=Arrays.asList(new Crusty(),new Slush(),new Powder());
//List<Snow> snow2=Arrays.asList(new Light(),new Heavy());
//这句编译错误,提示不能从List<Powder>转换为List<Snow>
List<Snow> snow3=new ArrayList<Snow>();
Collections.addAll(snow3, new Light(),new Heavy());
List<Snow> snow4=Arrays.<Snow>asList(new Light(),new Heavy());
}
}snow1和snow2里的对象不都是从snow中继承过来的吗?应该能够向上转型才对啊,但是为什么snow1能创建而snow2不能创建呢?谁能准确的解释一下Arrays.asList()方法是用的规则?
import java.util.*;class Snow{}class Powder extends Snow{}
class Crusty extends Snow{}
class Slush extends Snow{}
class Light extends Powder{}
class Heavy extends Powder{}public class AsListInference {
public static void main(String[] args){
List<Snow> snow1=Arrays.asList(new Crusty(),new Slush(),new Powder());
//List<Snow> snow2=Arrays.asList(new Light(),new Heavy());
//这句编译错误,提示不能从List<Powder>转换为List<Snow>
List<Snow> snow3=new ArrayList<Snow>();
Collections.addAll(snow3, new Light(),new Heavy());
List<Snow> snow4=Arrays.<Snow>asList(new Light(),new Heavy());
}
}snow1和snow2里的对象不都是从snow中继承过来的吗?应该能够向上转型才对啊,但是为什么snow1能创建而snow2不能创建呢?谁能准确的解释一下Arrays.asList()方法是用的规则?
解决方案 »
- 数据库配置和连接问题
- Jar 打包问题----------
- 请教大侠:用JBuilder 2005 生成javadoc 时,提示请增加内存,如何增加JBuilder中JVM的内存?如何在控制台生成javadoc?
- 用迭代器与组合模式对树进行遍历
- 一道Java题,不明白其选项
- Spring 怎么调用存储过程?
- 看一下程序中的正则表达式
- 这个问题有劳各位老师了,谢谢!
- 大家来探讨一下JAVA应用程序怎样做性能测试(主要测试瓶颈)
- 如何从request获取客户端浏览器的分辨率
- 要求随机产生10个数,并放入到数组。要求,数组里的元素不能重复。请各位高手帮我看下思路一遍帮我解决下问题,谢谢了!
- classpath问题
要不用老版jdk的写法Arrays.asList(new Snow[]{new Light(),new Heavy())})(这个可能就是可变参数的原理吧)
要不写成Arrays.asList((Snow)new Light(),(Snow)new Heavy());
你去看看我在百度给你的回复吧。里面有我刚才试验的结果哈
这样的话,根据Generic的规则List<Snow> 和List<Powder>是不一样的,所以报错.如果改成Arrays.asList(new Crusty(),new Heavy()),匹配这两个Object的Array类型就是Snow[],这样就不会报错了.
个人推荐1楼的用法,Arrays.asList(new Snow[]{new Light(),new Heavy())})