檢查參數的有效性
可以使用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.