方法(Methods)

目录

方法

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];

7.为所有导出的API元素编写文档注释

Guess you like

Origin blog.csdn.net/sunday2018/article/details/120098803