|
我简单说两句吧
我们分析了这么长时间,无非得出两个结论:
1、对于Java5来说,默认的List是List<E>,而List成了一种特殊的类型及raw类型,所以泛型已经不是一个额外的功能或者特性了,而是一种Java5固有的性质;
2、对于通配符“?”来说,add方法是无效的,这是书上的原话,因为不知道到底要插入什么类型的对象才是合法的;
3、“就像我们所见到的,一个List<X>不允许被转换为一个List<Y>,即使这个X能够被转换为Y。然而,一个List<X>能够被转换为一个List,这样您就可以通过继承的方法来做这样的事情。”-- ----摘自Matrix。
但是我们发现add后就变成Object类型的对象,从而失去了以前的类型;
4、其实最重要的一点,我们都忽略了,那就是SCJP本来也是一个很简单的考试,不会考像我们分析的那样难度的问题,现在再看一下选项,我们能看出来,其实就是在找泛型的继承关系,呵呵。
A. The type List<A> is assignable to List.
B. The type List<B> is assignable to List<A>.
C. The type List<Object> is assignable to List<?>.
D. The type List<D> is assignable to List<? extends B>.
E. The type List<? extends A> is assignable to List<A>.
F. The type List<Object> is assignable to any List reference.
G. The type List<? extends B> is assignable to List<? extends A>.
对于A,可以直接排出掉,因为本来就是一个带泛型,一个不带泛型;
对于B,排除掉,两个泛型,虽然隐式的为继承关系,但是没有显示的表示出来;
对于C,正确,因为?代表任意一种类型,包括Object;
对于D,正确,很明显是集成关系;
对于E,很明显是错误的,因为关系反了;
对于F,明显也是错误的,一般这种非常嚣张的选项(比如说带有any、must,all这样的词语),利用GRE或者TOFEL考试的判别方法可以直接排除,万事没有绝对!;
对于G,虽然说两边都是继承关系,但是很明显左边是右边的子集。
这样分析也很简单,呵呵。
辛苦silver了,也做了不少实验,还好我们终于找到了正确的答案。 |
|