Enjoy yourself,and don't care about others' thinking!
----TiGERTiAN
BlogJava
首页
新随笔
联系
聚合
管理
随笔-90 评论-139 文章-0 trackbacks-0
Java Generics And Collection 学习笔记(1)
请看下面两段代码
interface
Name
extends
Comparable
{
public
int
compareTo(Object o);
}
class
SimpleName
implements
Name
{
private
String base;
public
SimpleName(String base)
{
this
.base
=
base;
}
public
int
compareTo(Object o)
{
return
base.compareTo(((SimpleName)o).base);
}
}
class
ExtendedName
extends
SimpleName
{
private
String ext;
public
ExtendedName(String base, String ext)
{
super
(base);
this
.ext
=
ext;
}
public
int
compareTo(Object o)
{
int
c
=
super
.compareTo(o);
if
(c
==
0
&&
o
instanceof
ExtendedName)
return
ext.compareTo(((ExtendedName)o).ext);
else
return
c;
}
}
class
Client
{
public
static
void
main(String[] args)
{
Name m
=
new
ExtendedName(
"
a
"
,
"
b
"
);
Name n
=
new
ExtendedName(
"
a
"
,
"
c
"
);
assert
m.compareTo(n)
<
0
;
}
}
interface
Name
extends
Comparable
<
Name
>
{
public
int
compareTo(Name o);
}
class
SimpleName
implements
Name
{
private
String base;
public
SimpleName(String base)
{
this
.base
=
base;
}
public
int
compareTo(Name o)
{
return
base.compareTo(((SimpleName)o).base);
}
}
//
use legacy class file for ExtendedName
class
Test
{
public
static
void
main(String[] args)
{
Name m
=
new
ExtendedName(
"
a
"
,
"
b
"
);
Name n
=
new
ExtendedName(
"
a
"
,
"
c
"
);
assert
m.compareTo(n)
==
0
;
//
answer is now different!
}
}
注意到不一样的地方呢吗?compareTo方法的参数不一样。上面的代码在调用m.compareTo(n)的时候会调用ExtendedName中的,而下面这种不会,因为ExtendedName中的compareTo参数是Object,相当于重载了compareTo的方法,而父类SimpleName中的compareTo方法由于参数不同仍然被保留了,所以将Name类型的参数传给compareTo的时候会优先调用SimpleName中的compareTo(Name)来进行比较。
所以在一些继承里面,建议使用Object做参数的类型,称之为Binary Compatibility。
posted on 2007-10-28 21:09
TiGERTiAN
阅读(632)
评论(2)
编辑
收藏
所属分类:
Java
评论:
#
re: Java Generics And Collection 学习笔记(1)[未登录] 2007-10-29 16:45 |
刘明
没明白。
首先,你的第二个的ExtendedName没写。这是我写的,看是不是合你的意思。
public class ExtendedName extends SimpleName {
private String ext;
public ExtendedName(String base, String ext) {
super(base);
this.ext = ext;
}
public int compareTo(Name o) {
int c = super.compareTo(o);
if (c == 0 && o instanceof ExtendedName) {
return ext.compareTo(((ExtendedName)o).ext);
} else {
return c;
}
}
}
如果你的ExtendedName和我的一样的话,两个client返回的结果是一致的。-1。例如assert的话,第二个应该也是'<'。不知道是我跟你写的ExtendedName不一致造成的,还是其它什么问题。大家研究研究。。。
回复
更多评论
#
re: Java Generics And Collection 学习笔记(1)
2007-10-29 17:30 |
TiGERTiAN
上面不是有注释吗,ExtendedName和第一个一样就是传入的参数是Object不是Name,如果传入的参数是Name那么结果就一样了,但是如果SimpleName中传入了Name类型,而ExtendedName中传入了Object类型则结果是不一样的。下面那个就是相等了。
回复
更多评论
新闻频道
新用户注册
刷新评论列表
标题
姓名
主页
验证码
*
内容(请不要发表任何与政治相关的内容)
Remember Me?
登录
使用高级评论
新用户注册
返回页首
恢复上次提交
[使用Ctrl+Enter键可以直接提交]
该文被作者在 2007-10-28 21:20 编辑过
成果网帮您增加网站收入
相关链接:
网站导航:
博客园
BlogJava
博客生活
IT博客网
C++博客
PHP博客
博客园社区
管理博客
教师博客
天文博客
汽车博客
足球博客
股票博客
电子博客
管理
相关文章:
Java中批处理SQL的使用方法(JDBC)
对象池技术
Java Generics And Collection 学习笔记(1)
java.lang.OutOfMemoryError: PermGen space 的疑惑
hibernate中at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)异常的解决方法
Jsp中的大祸根
新学期新气象新的研究方向
[转]tomcat中MySQL连接池配置
利用Spring发送Gmail(无XML配置文件版本)
Struts中上传文件的总结
慢慢混,慢慢学
<
2007年10月
>
日
一
二
三
四
五
六
30
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6
7
8
9
10
常用链接
我的随笔
我的评论
我的参与
最新评论
留言簿
(4)
给我留言
查看公开留言
查看私人留言
随笔分类
(100)
Ajax(4)
C/C++(2)
Design Patterns(6)
DotNet(10)
Feeling(17)
Flex(4)
Java(26)
MapXtreme(7)
Mobile&J2ME
Oracle(5)
Other technique(10)
VB/ASP(6)
WebWork(3)
随笔档案
(89)
2008年9月 (1)
2008年4月 (1)
2008年3月 (2)
2008年2月 (8)
2008年1月 (1)
2007年11月 (2)
2007年10月 (14)
2007年9月 (3)
2007年7月 (4)
2007年6月 (2)
2007年5月 (12)
2007年4月 (15)
2007年3月 (6)
2007年2月 (2)
2007年1月 (1)
2006年7月 (2)
2006年4月 (1)
2006年1月 (1)
2005年11月 (1)
2005年8月 (1)
2005年7月 (9)
相册
我正在读的书
我的好友们
JavaBy
有心就有翼 有梦就会飞--MC
搜索
积分与排名
积分 - 46634
排名 - 190
最新评论
1. re: Servlet Action is not available 错误的其他可能原因和解决方法
评论内容较长,点击标题查看
--Good Guy
2. re: Google的浏览器可以下载了[未登录]
打开网页速度很慢,等正式版出来后再试试,还是用回偶滴 Firefox。
--daijn
3. re: Google的浏览器可以下载了
我决出占内存来,简洁觉出来了
--猪
4. re: Google的浏览器可以下载了[未登录]
@蒋家狂潮
我感觉还好,不是太耗内存,但不节省。
--TiGERTiAN
5. re: Google的浏览器可以下载了
简约,不错。还带开发用的一些工具。
--IceRao
阅读排行榜
1. Servlet Action is not available 错误的其他可能原因和解决方法(3731)
2. java.lang.OutOfMemoryError: PermGen space 的疑惑(2013)
3. hibernate中at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)异常的解决方法(1811)
4. TLF(www.eastgame.net)创始人Thunder宣布辞职(非技术贴,但是国内网络中比较重要的一件事,希望能放在首页)(1634)
5. Flex中Tree控件的开发(1332)
评论排行榜
1. hibernate中at org.hibernate.tuple.AbstractEntityTuplizer.createProxy(AbstractEntityTuplizer.java:372)异常的解决方法(15)
2. 这两天用Flex写了一个多媒体播放器(14)
3. Servlet Action is not available 错误的其他可能原因和解决方法(11)
4. TLF(www.eastgame.net)创始人Thunder宣布辞职(非技术贴,但是国内网络中比较重要的一件事,希望能放在首页)(10)
5. Google宕机了?(8)