《Effective Java》阅读体会之四--通用方法(建议覆盖toString,compare排序的比较)

本文介绍了Java中如何通过重写Object的toString方法来友好地展示对象信息,并利用String.format方法进行格式化输出。此外,还讲解了实现Comparable接口来进行对象排序的方法,包括如何在实体类内部直接实现compareTo方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1. Object的toString方法返回的格式是 类名+@+散列码的十六进制表示。toString约定我们必须覆盖这个方法。

例如在PhoneNumber的toString方法里可以 写成 区号-电话号码的形式,给客户一个约定的友好的展示。

 

String.format方法可以进行一些必要格式的显示,比较高效

如:

String.format("%1$,12d", 85022088)

 

具体实现可以参阅:http://www.iteye.com/topic/339734

 

2.考虑实现comparable接口

 

如果你要对一个ServiceEvent的事件进行排序,最好在这个实体里就实现comparable接口


形如:

 

@Override
	public int compareTo(Object o) {
		return this.eventTime.compareTo(((ServiceCtrlEvent)o).getEventTime());
	}

 

这样就可以很简单的和很多集合类一起使用,排序可以直接使用集合的排序,

 

Collections.sort(serviceCtrlEvents);

 

有一点值得一提:

由于compareTo方法只是指定了返回值的符号,并没有制定返回值,在通常我们些的compareTo方法上会有一定的改进空间:

如实现电话号码的比较时

public int compareTo(PhoneNumber pn){
    if(areacode<pn.areaCode){
       return -1; 
    }
    if
    if(areacode>pn.areaCode){
       return 1; 
    }
     if(lineNumber<pn.lineNumber){
       return -1; 
    }
     if(lineNumber>pn.lineNumber){
       return 1; 
    }
    return 0;
}

 

 

可以改进为:

   

public int compareTo(PhoneNumber pn){
    areaCodeDiff =areacode-  pn.areaCode;
    if(areaCodeDiff !=0){
       areaCodeDiff; 
    }
        ……
   return 0;
]

 

Java平台的所有值类Integer、BigDecimal 等都实现了这个comparable接口。

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值