目录
方法
1.如何处理参数,返回值
2.如何设计方法签名
3.如何为方法编写文档
设计方法的标准:可用性,健壮性和灵活性
1.检查参数的有效性
在方法的开头检查参数的有效性
public BigInteger mod(BigInteger m) {
// 参数校验
if (m.signum() <= 0) {
throw new ArithmeticException("Modulus <= 0:" + m);
}
// ...
}
对于非公有的方法通常应该使用assertion来检查参数, 例如:
private static void sort(long[] a, int offset, int length) {
assert a != null;
assert offset >= 0 && offset <= a.length;
assert length >= 0 && length <= a.length - offset;
// ...
}
如果assert失败,将会抛出AssertionError
2.必要时进行保护性拷贝
3.谨慎设计方法签名
1.谨慎选择方法名称
2.不要过于追求提供便利的方法
3.避免过长的参数列表,目标参数是4个或更少
4.慎用重载
5.慎用可变参数
6.返回空数组或空集合,而不是null
有时有人会认为, null返回值比空数组好,因为它避免了分配数组所需要的开销.这个观点是不对的.
原因1,这个级别上担心性能问题是不明智的,除非分析表明这个方法正是造成性能问题的真正源头
原因2,对于不返回任何元素的调用,每次都返回同一个空数组是有可能的,因为空数组是不可变的,而不可变对象有可能被自由地共享.
结论,永远不要用返回null代替空数组或集合.
// 有泛型的可以使用Collections#emptyList()方法返回空集合
public List<String> getSomething(Object args) {
if (args == null) {
// 返回空集合而不是null, JDK中的Collections工具类
return Collections.emptyList();
}
}
// 没有泛型的可以直接使用Collections.EMPTY_LIST返回空集合
public List getSomethings() {
// ...
return Collections.EMPTY_LIST;
}
方法返回值为数组时
// 定义一个空数组用于返回
private static final int[] EMPTY_ARRAY = new int[0];