检查参数的有效性
可以使用android注解,例如 :
public <T> void register(@NonNull Class<? extends T> clazz) { }
必要时进行保护性拷贝
对于构造器的每个可变参数进行保护性拷贝是必要的
public class Period { private final Date start; private final Date end; public Period(Date start, Date end) { this.start = new Date(start.getTime()); this.end = new Date(end.getTime()); } public Date start() { return new Date(start.getTime()); } public Date end() { return new Date(end.getTime()); } }
谨慎设计方法签名
谨慎的选择方法的名称. 遵循标准的命名习惯
不要过于追求提供便利的方法. 当一项操作被经常用到的时候, 才考虑为他提供快捷方式
避免过长的参数列表
- 把方法分解成多个方法
- 增加辅助类,来保存参数的分组
- 从对象构建到方法调用都采用Builder模式, 最好定义一个对象来表示所有的参数
参数选择 :
- 参数类型有限选择接口来输入,而非类, 避免拷贝操作
- 对于boolean值参数, 可以使用两个元素的枚举类型
慎用重载
- 最佳修正方案 :
- 使用单个方法来替代多个重载的方法, 利用 Class instanceof ?
慎用可变参数
可变参数 : 申明两个参数, 一个是指定类型的正常参数, 另一个是这种类型的varargs参数
public static int min(int firstArg, int... remainingArgs) { int min = firstArg; for (int arg : remainingArgs) { if (arg < min) { min = arg; } } return min; }
返回0长度的数组或者集合,而非null
- 使用Arrays or Collections , 避免返回null . 会导致NullPointException.