effective java 读书笔记---第7章 方法
来源:互联网 发布:加内特2004季后赛数据 编辑:程序博客网 时间:2024/06/06 20:54
38.检查参数的有效性
需要在方法入口处检查参数有效性
对于公有方法,需要使用@throws 标签说明违反参数值限制时抛出的异常
对于 private 方法可以使用断言(assertion)来检查它们的参数例子:
private static void method(int i) { assert i > 0; System.out.println(i); }
注意默认情况系 java 是不开启断言检查的,因此正常情况下,以上代码即使传入-1,也不会终止运行,除非你手动使用-enableassertions或-ea 来开启断言
方法与构造器参数的限制应该写在文档中,并且在方法的开头处使用显示的检查来实施这个限制
39.必要时进行保护性拷贝
在设计不可变类时,如果引用了可变的域,在初始化这些域是使用保护性拷贝
public class DateTest{ private final Date date; public DateTest(Date date) { this.date = new Date(date.getTime()); }
注意保护性拷贝需要在检查参数有效性之前进行,并且有效性检查需要针对拷贝后的对象,这样可以避免在危险阶段从例外一个线程改变类的参数
对于参数类型可以被不可信任方子类化的参数,请不要使用 clone 方法来进行保护性拷贝
对于 date 的访问方法也需要使用保护性拷贝来进行访问
如果允许客户提供的对象进入到内部数据结构中,则需要考虑客户提供的对象是否有可能是可变的.如果是,就需要考虑你的类是否能容忍对象进入数据结构之后发生变化,如果答案是否定的,就需要对该对象进行保护性拷贝
通常设计不可变类时应该优先考虑使用不可变对象,例如例子中的程序,可以考虑保存 date.getTime()的long 对象进行保存,此时就不必担心保护性拷贝的问题
40.谨慎设计方法签名
谨慎的选择方法名称
不要过于追求提供便利的方法
避免过长的方法列表,最好不超过四个参数
对于参数类型,优先使用接口,而不是实现这个接口的类
对于 boolean 类型,优先使用两个元素的枚举类
41.慎用重载
重载方法的调用与覆盖方法的调用不同,覆盖方法的调用在运行时会根据对象的实际类型决定调用哪种方法,重载在编译时已经确定调用哪种方法(不会根据运行时的对象类型选择调用方法)
安全的重载策略是,永远不要导出两个具有相同参数数目的重载方法,如果方法使用可变参,保守的方法是不去重载
对于构造器重载,可以优先考虑静态工厂
考虑List<Integer> list = ... ;list.remove(1)
remove(Object) remove(index) 会直接调用 remove(index)方法,除非存入参数 Integer 类型
42.慎用可变参数
43.返回零长度的数组或者集合,而不是 null
返回类型为数组或者集合的方法没有理由返回 null
44.为所有导出 api 元素编写文档注释
- effective java 读书笔记---第7章 方法
- Effective Java读书笔记(第7章-方法)
- effective java 读书笔记---第9章 异常
- effective java 读书笔记---第10章 并发
- 《Effective Java》第7章 方法
- Effective Java读书笔记(第3章-对于所有对象都通用的方法)
- Effective Java读书笔记 第二部分(第7章-第11章)
- Effective Java读书笔记六:方法
- Effective Java读书笔记(第4章-类和接口)
- Effective Java读书笔记(第5章-泛型)
- Effective Java读书笔记(第6章-枚举和注解)
- Effective Java读书笔记(第8章-通用程序设计)
- Effective Java读书笔记(第9章-异常)
- Effective Java读书笔记(第10章-并发)
- Effective Java读书笔记(第11章-序列化)
- effective java 读书笔记---第8章 通用程序设计
- effective java 读书笔记---第11章 序列化
- Effective Java笔记-第7章:方法
- [BZOJ1061][NOI2008]志愿者招募 费用流
- 基本文件操作&fopen函数&FILE指针&ftell &fseek&rewind&fgets文件复制&feof
- EM算法(期望最大化)——理论部分
- 各种排序方法的c++实现
- JavaScript this 的理解
- effective java 读书笔记---第7章 方法
- [省选] [线段树] [差分数组] [BZOJ1558] [JSOI2009] 等差数列
- Linux下mysql备份
- Java学习笔记 Day04 (for循环嵌套、函数以及函数重载、数组)
- 排序算法01:冒泡排序
- springBoot发送邮件
- 【C++学习笔记】if条件分支
- 将二叉树拆成链表
- UVa 11809 Floating Point Numbers