【 Effective java】第8章 读书笔记

第8章 方法

49,检查参数地有效性

对公有的和受到保护的方法,要用 Javadoc 的 @throws 标签在文档中说明违反参数值限制时会抛出的异常。

在JDK7中增加的 Objects.requirenonNull 方法比较灵活,方便。因此不必再手工进行 null 检查。

在方法执行它的计算任务之前,应该进行参数检查,但是也有一个例外,那就是在某些情况下,有效性检查工作非常昂贵,且有效性检查已经隐含在计算中完成。例如 Collection.sort(List),列表中所有对象都必须是可以进行比较的。

每当编写构造器或者方法时,应该考虑它的参数有哪些限制,应该把这些限制写在文档中。

50,必要时进行保护性拷贝

保护性拷贝:https://blog.csdn.net/tounaobun/article/details/8607174

Date 是一个可变类。

String 是一个不可变类。

假设类的客户端为尽其所能来破环这个类的约束条件,因此你必须保护性地设计程序。

保护性拷贝是在参数有效性之前进行的,且有效性检查是检查拷贝之后的对象,而不是针对原始对象。

对于参数类型可以被不可信任方子类化的参数,请不要用 clone 方法进行保护性拷贝。

如果一个类包含有从客户端得到或者返回到客户端的可变组件,这个类就必须保护性拷贝这些组件。

如果拷贝的成本受到限制,并且性能它的客户端不会不恰当地修改组件,就可以文档指明客户端的职责是不得修改受到影响的组件,以此来代替保护性拷贝。

51,谨慎设计方法签名

谨慎地选择方法的名称。

不要过于追求提供便利的方法。

避免过长的参数列表。

对于参数类型,要优先使用接口而不是类。

对于 boolean 参数,要优先使用两个元素的枚举类型。

52,慎用重载

对于重载方法的选择是静态的,而对于被覆盖的方法选择则是动态的。

安全而保守策略是永远不要导出具有两个相同参数树数目的重载方法。

你可以给方法起不同的名字,而不用重载机制。

不要在相同参数位置调用带有不同函数接口的方法。

String 类导出的两个静态工厂方法违背了本条建议:valueOf ( char [ ] )valueOf ( Object )

53,慎用可变参数

可变参数是为 printf 设计的,该方法时与可变参数同时添加发到Java平台的,为了核心的反射机制,被改造成利用可变参数。

在重视性能的情况下,要慎用可变参数,每次调用可变参数都会导致一次数组分配和初始化。

声明该方法的5个重载,,每个重载方法带有0至3个参数,当参数数目超过三个时就使用一个可变参数方法。

54,返回零长度的数组或者集合,而不是null

永远不要返回 null,而应该返回一个零长度的数组或集合。

55,谨慎返回 optional

创建异常会捕捉到整个堆栈轨迹,因此抛出异常的开销很高。

Optional < T > 类代表的是一个不可变容器,它可以存放单个非 null 的 T 引用,或者什么内容都没有。

不包含任何内容的 option 为,非空的 option 中的值称作存在

永远不要通过返回 option 的方法返回 null。

Optional 本质与收件异常类似,因为它们强迫用户没有返回值的事实。

容器类型包括集合,映射,Stream,数组和 optional,都不应该被包装在 optional 中。

如果无法返回结果并且当没有返回结果时客户端必须执行特殊的处理,那么就应该声明该方法返回Optional < T >

永远不要返回基本包装类型的 optional,小的(Boolean,Byte,Character,Short,Float)基本类型除外。

几乎永远不适合用optional作为键,值,或者集合或数组中的元素。

如果发现自己在编写的方法始终无法返回值,并且相信该方法的用户每次在调用它时都要考虑到这种可能性,那么或许就应该返回一个 optional。但是应当注意代与返回 optional 相关的真实的性能影响;对于注重性能的影响,最好是返回一个 null,或者抛出异常。

最后,永远不要把 optional 用作作为返回值以外的方法。

56,为所有导出的 API 元素编写注释文档

如果要想使一个API真正可用,就必须为其编写文档!

为了正确的编写 API 文档,必须在每个被导出的类,接口,构造器,方法和域的声明之前增加一个文档注释。

如果类是可序列化的,那么应该对它的序列化形式编写文档。

方法的文档注释应该简介地描述出它和客户端之间地约定。

文档注释应该列举在这个方法所有的前提条件,后置条件以及副作用

同一个类或者接口地两个成员或者构造器,不应该具有同样地概要描述。特别要注意重载情形。

为泛型或者方法编写文档时,确保要说明所有的类型参数。

为枚举类型编写文档时,要确保在文档中说明常量。

为注解类型编写文档时,要确保在文档中说明所有成员。

类或者静态方法是否线程安全,应该在文档中对它的线程安全级别进行说明。

在文档注释内部出现任何 HTML 标签都是被允许的,但是 HTML 元字符必须经过转义。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值