JAVA中泛型的up-case 和 down-case

今天在SUN网站上看关于泛型的资料,觉得它举的一个例子很好,一下让我解决了泛型的类型转换这个难题。
http://java.sun.com/docs/books/tutorial/java/generics/wildcards.html

情境
通过笼子装动物来解释泛型的up-case and down-case。
二个类:笼子(泛型)与动物
class 笼子 <T> { }
class  动物 { }
class 狮子 extends 动物 { }
class 蝴蝶 extends 动物 { }

对象:狮子、蝴蝶和若干不同类型的笼子
一只狮子 = new 狮子()
一只蝴蝶 =  new 蝴蝶 ()
一只装狮子的笼子 = new 笼子<狮子>()
    这只笼子很牢固,但不密集。
一只装蝴蝶的笼子 = new 笼子<蝴蝶>()
    这只乱子很密集,但不牢固。
一只可以装所有动物的笼子 = new 笼子<动物>()
    这个笼子不但牢固,而且密集。
一只可以装某种动物的笼子 = new 笼子 <? extends 动物> ()
    这个笼子长得什么个样子,没人知道。它可能很牢固,可能很密集,也可能两者都有。

问题
1.
一只装狮子的笼子 .add(一只狮子)
一只装蝴蝶的笼子.add(一只蝴蝶)
2.
一只可以装所有动物的笼子.add(一只狮子)
一只可以装所有动物的笼子.add(一只蝴蝶)
3.
一只可以装所有动物的笼子 = 一只装狮子的笼子 (is a)
一只可以装所有动物的笼子 = 一只装蝴蝶的笼子 (is a)
4.
一只可以装某种动物的笼子.add(一只狮子)
一只可以装某种动物的笼子.add(一只蝴蝶)
5.
一只可以装某种动物的笼子 = 一只装狮子的笼子 (is a)
一只可以装某种动物的笼子 = 一只装蝴蝶的笼子 (is a)
 

解答
1。 显然成立。
2。显然成立。
3。都成立。
      因为
               (一只装狮子的笼子:很牢固,但不密集。
                          而    一只可以装所有动物的笼子:不但牢固,而且密集。)
       所以
               一只装狮子的笼子 is not a 可以装所有动物的笼子
       证明完毕
       另一语句证明类似
4。一只可以装某种动物的笼子 能装一个狮子或者一只蝴蝶吗?那请问你究竟是用来装什么动物先。如果你决定要装狮子,因为这只笼子只能装某一种,那对不起,你不能再装蝴蝶。反之亦然。竟然不知道能装什么,那就什么也不能装了。所以这两个语句都错误。
5。都成立。
      因为
               (一只装狮子的笼子:很牢固,但不密集。
                          而    一只可以装所有动物的笼子:可能很牢固,可能很密集,也可能两者都有。)
       所以
               一只装狮子的笼子 是一种  可以装某种动物的笼子
       证明完毕
       另一语句证明类似。

补充
对于问题4,如果一只可以装某种动物的笼子什么都装不了,那它不就是废物了吗?不然,它可以应用于泛型函数中。
如:
void 喂笼中动物 (一只可以装某种动物的笼子) {
从 这只可以装某种动物的笼子 中取出 动物 并进行喂养
}
调用:
喂笼中动物 (一只装狮子的笼子)
喂笼中动物 (一只装蝴蝶的笼子)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值