java里面关于泛型限定的一个问题 20
展开全部
先不说语法的事情,感觉题主这样用就不是很合乎多态的意义。如果在基类中定义了getName方法,则可以期望其子类中都含有getName方法。这是多态的用意所在,而且用<? extends Ren>表达“Ren类的子类”这一概念也非常自然。但是反过来就很别扭了。即便XueSheng类中含有getName方法,也可能只是它独有的;不能直接说明其所有祖先类<? super XueSheng>中都含有getName方法,因此语法不对。Oracle的上的教程中是这么举例子的:<pre t="code" l="java">public static void addNumbers(List<? super Integer> list) {
for (int i = 1; i <= 10; i++) {
list.add(i);
}
}你看人家这个例子就比较舒服。add方法是List结构定义的,不管List里面元素类型是什么。而add方法的参数是Object,包括Integer在内的任何祖先类都是Object类的子类,所以这也合乎逻辑。而人家这样用<? super Integer>的好处就是允许用户使用多态,即便用户用Object类型引用一个Integer,也可以带入这个函数中。
for (int i = 1; i <= 10; i++) {
list.add(i);
}
}你看人家这个例子就比较舒服。add方法是List结构定义的,不管List里面元素类型是什么。而add方法的参数是Object,包括Integer在内的任何祖先类都是Object类的子类,所以这也合乎逻辑。而人家这样用<? super Integer>的好处就是允许用户使用多态,即便用户用Object类型引用一个Integer,也可以带入这个函数中。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询