《Effective JAVA》第二篇

为了更好地可拓展性,JAVA提供了Object类作为所有类的父类,Object类拥有一系列所有类都可能用到的方法,而这些方法并非明确的,需要被覆盖以实现具体功能。而在具体实现这些方法的时候,由于其自由度较高,我们需要一些约定来保证其对于其他类的可见度。


       首先,equals方法作为一个尤为普遍的方法,我们常常需要用到。如何判断某个类的实例是否相等?这不像简单的数字之间是否相等,又或是稍复杂字符(串),一个类包括简单的成员变量,但同时也包含成员方法。最简单的方法是不覆盖equalsequals具有自反性,对称性,传递性,一致性,前三个与离散数学中的”=”定义相同,最后一个是对于程序自身的要求。同时,在我们覆盖equals方法的时候,需要相应的覆盖hashCode方法,来保证该类可以结合所有基于散列的集合一起正常工作,包括HashMapHashSet以及Hahtable


       其次,toString 方法建议所有子类都要覆盖。Object类虽然提供了它的一个实现,但返回值并非我们需要的,我们需要其反馈一个简洁,信息量丰富的值。这个需求并非强制性的要求我们这样去覆盖toString方法,也不会产生fatal error,但是会让实现这样的方法的类拥有更好的使用体验。


       然而对于clone方法而言,实现后将带来许多问题,其他的接口都不应该拓展这个接口,为了继承而设计的类也不应该去实现该接口,除了数组拷贝,有经验的程序员从来不去调用clone方法,也就不必去实现它。如果没有办法很好地保护clone方法,就不要去轻易去尝试实现它。


       对于comparable接口,实现具有局限性,需要保证相关域的范围,否则会导致错误的返回值,比如两个三十二位整数的差值可能大于一个有符号的三十二位整数,从而可能带来越界等问题,而这个接口并非必须的,仅仅是方便了我们的使用,所以在明确知道相关域的范围符合要求的时候,使用这项技巧能带来意外惊喜,否则不要让它成为你的负担。

参考书籍《Effective JAVA》
#Java#
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-09 16:15
我应届生,去年10月份开始在这家公司实习,到今年10月份正好一年想(实习+试用期),在想要不要提前9月份就离职,这样好找工作些,但又差一个月满一年,又怕10月份国庆回来离职,容易错过了下半年的金九银十,到年底容易gap到年后
小破站_程序员YT:说这家公司不好吧,你干了快一年 说这家公司好吧,你刚毕业就想跑路说你不懂行情吧,你怕错过金九银十说 你懂行情吧,校招阶段在实习,毕业社招想换工作 哥们,我该怎么劝你留下来呢
应届生,你找到工作了吗
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务