A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

我看了高新技术部份泛型上下限。理解不是很透彻。
希望哪位可以用自己的话术来和我说说。谢谢了。我不要长篇大论的那种。我要的是能自己的话来理解。
就当是一次老师提问了。

5 个回复

倒序浏览
<?>这个是所以类型。
<? extends T>只能是T或它的子类。
<? super T>只能是T或它的父类。
3句话一起来理解,明白了不?
回复 使用道具 举报
泛型是对普通方法更加泛化的实现,这种泛型类是适用于所有类或者部分类,一般情况下是使用与部分类。对这些类会存在某些限制,而泛型类并不关心类的具体类型是什么,而在乎它是否可以执行某个方法!
回复 使用道具 举报
水果类:
class Fruits{
}
苹果类:
class Apple extends Fruits{
}
青苹果类:
class GreenApple extends Apple {
}
梨子类:
class Pear extends Fruits{
}
向上造型一个泛型对象的引用 <?extends T>
向下造型一个泛型对象的引用 <? super T>

List<?extends Fruits> fruits = new ArrayList<Apple>();
fruits.add(new xxx());//xxx表示任意类型,add形参类型是Fruits的的类型或是Fruits的子类,但是具体是那个类型不确定,所以编译错误
Fruits aFruit = fruits.get(0);//get方法返回的类型是Fruits的的类型或是Fruits的子类, 所以可以用父类引用接收子类的引用,编译通过
所以说<?extends T>用于读取数据;

List<? super Apple> fruits = new ArrayList<Fruits >();
fruits.add(Apple或 Apple子类对象的引用); //add形参类型是Apple的的类型或是Apple的父类,所以能接收所有的Apple或 Apple子类对象的引用)
Apple aApple = fruits.get(0); //get方法返回的类型是Apple的的类型或是Apple的父类,但是具体是那个类型不确定,所以也没方法指定一个类型引用来接收它,自然编译错误
所以说<? super T>用于写入数据;

总结:
如果你想从一个数据类型里获取数据,使用 ? extends 通配符
如果你想把对象写入一个数据结构里,使用 ? super 通配符
如果你既想存,又想取,那就别用通配符。

重点理解这句话:父类的引用可以接收子类的实例对象的引用(多态性)

评分

参与人数 1技术分 +1 收起 理由
轻语。 + 1 神马都是浮云

查看全部评分

回复 使用道具 举报
上限<?extends T>表示只能是T或T的子类
下限<? super T>  表示只能是T或T的父类
回复 使用道具 举报
skill20 发表于 2014-5-10 10:41
这个是所以类型。

这个我明白,跟张老师里面的一样。我还是需要多消化一下。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马