`
xander
  • 浏览: 15914 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
社区版块
存档分类
最新评论

Effective Java 笔记(八)

 
阅读更多

相关读书笔记列表

NO.23 检查参数的有效性

非公有的方法我们应该用断言的方法来检查它的参数,而不是使用通常大家所熟悉的检查语句来检测。如果我们使用的开发平台是JDK1.4或者更高级的平台,我们可以使用assert结构;否则我们应该使用一种临时的断言机制。

有些参数在使用过程中是先保存起来,然后在使用的时候再进行调用,就必须做好检查工作,否则程序可能会抛出一些异常让你摸不着头脑(如常见的空指针异常),也不能马上定位问题的所在位置,构造函数正是这种类型的一种体现,所以我们通常对构造函数参数的有效性检查是非常仔细的。

总之,当编写一个方法或者构造函数的时候,应该考虑对应它的参数有哪些限制,并且要把这些限制写到文档中,在方法体的起始处,通过显示的检查来实施这些限制。

NO.24 需要时使用保护性拷贝

假设类的使用者会尽一切手段来破坏这个类的约束条件,在这样的前提下,你必须保护性地设计程序。面对客户的不良行为时仍然能保持健壮性的类。
对于一个非可变类,可以考虑对其构造函数的可变参数采用保护性拷贝,如

对获取参数的get方法也要采用clone的方式返回,如:

记住非零长度的数组总是可变的,尽量使用非可变的对象作为内部组件,这样就不必关心保护性拷贝问题.

NO.25 谨慎设计方法的原型

1、谨慎选择方法的名字

① 选择易于理解的,并且与同一个包中的其他名字风格一致;

② 选择与大众认可的名字一致;

2、不要过于追求提供便利的方法。过多的方法会增加类的学习和使用成本,只有当一个操作被用得非常频繁的时候,才考虑为他提供一个快加的方法。

3、避免过长的参数列表。太长的参数不便于使用者使用,尤其是参数类型相同的时候,很容易产生参数传递错误的问题。避免此类错误的方法:

① 可以把一个方法分解成多个方法;

② 可以创建一个辅助类(helper class)。将参数组织成一个类作为参数传入;

4、对于类型参数,优先使用接口,而不是类。如参数为Map的时候,该方法可以接收Hashtable、HashMap、TreeMap等类型的参数。

5、谨慎使用函数对象

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics