网站首页 新闻首页 网页设计图形动画软件编程网站开发办公软件操作系统数据库网络技术认证考试范文资料黑客攻防 书籍教程 进入论坛

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

http://www.diybl.com/ 2008-1-25  网络 点击:  [ 评论 ]
文章搜索:    【点击打包该文章】

今天在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 喂笼中动物 (一只可以装某种动物的笼子) {
从 这只可以装某种动物的笼子 中取出 动物 并进行喂养
}
调用:
喂笼中动物 (一只装狮子的笼子)
喂笼中动物 (一只装蝴蝶的笼子)


欢迎光临DIY部落,点击这里查看更多文章教程   【点击打包该文章】
如果图片或页面不能正常显示请点击这里 站内搜索:   

文章评论

请您留言