方法开发规范

本文介绍了Java方法开发的规范,包括检查参数有效性,如自定义方法和使用Assert,保护性拷贝的异常处理,方法签名的注意事项,如避免重载和使用可变参数,返回值的最佳实践,以及方法注释的完整性和准确性。强调了避免返回null,谨慎使用Optional,以及详细注释的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

方法参数

方法执行前,最好保证方法参数在预想范围内,否则容易出现未知异常。

检查参数有效性

自定义方法

示例:

if (object != null) {
	throw new IllegalArgumentException(message);
}

Assert方法

最后实现一样,检查参数是否为null,不是抛出异常。

Assert.isNull(obj, "param obj is not null");

需要的情况下使用保护性拷贝

异常情况一

public class CopyInstance {

    private Date start;
    private Date end;

    public CopyInstance(Date start, Date end) {
        if (start.compareTo(end) > 0) {
            throw new IllegalArgumentException("error");
        }
        this.start = start;
        this.end = end;
    }

    public static void main(String[] args) {
        Date start = new Date();
        Date end = new Date();
        CopyInstance instance = new CopyInstance(start, end);
        end.setYear(1971);
    }
}

异常情况二

public class CopyInstance {

    private Date start;
    private Date end;

    public CopyInstance(Date start, Date end) {
        if (start.compareTo(end) > 0) {
            throw new IllegalArgumentException("error");
        }
        this.start = new Date(start.getTime());
        this.end = new Date(end.getTime());
    }

    public Date getStart() {
        return start;
    }

    public Date getEnd() {
        return end;
    }

    public void setStart(Date start) {
        this.start = start;
    }

    public void setEnd(Date end) {
        this.end = end;
    }

    public static void main(String[] args) {
        Date start = new Date();
        Date end = new Date();
        CopyInstance instance = new CopyInstance(start, end);
        instance.getEnd().setYear(1972);
    }
}

安全设计

public class CopyInstance {

    private Date start;
    private Date end;

    public CopyInstance(Date start, Date end) {
        if (start.compareTo(end) > 0) {
            throw new IllegalArgumentException("error");
        }
        this.start = new Date(start.getTime());
        this.end = new Date(end.getTime());
    }

    public Date getStart() {
        return new Date(this.start.getTime());
    }

    public Date getEnd() {
        return new Date(this.end.getTime());
    }

    public void setStart(Date start) {
        this.start = new Date(start.getTime());
    }

    public void setEnd(Date end) {
        this.end = new Date(end.getTime());
    }
}

方法签名

慎用重载

永远不要有两个相同参数数量的重载方法,很容易混淆。

慎用可变参数

个人认为:不要使用可变参数,推荐使用数组、列表。

注意

  1. 谨慎选择方法名称。满足见名知意。
  2. 不要过于追求提供便利的方法,每个方法专注完成自身工作即可。
  3. 避免过长的参数列表。有三种技巧可以缩短参数列表:将一个方法分解为多个方法,每个方法需要参数的一个子集即可;创建辅助类,保存参数分组;使用Builder建造器模式。
  4. 方法参数优先使用接口,而不是具体类。

返回值

返回零长度的数组或集合,而不是null

返回null,调用方法需要检查判断方法返回值,容易出现 NullPointerException 问题。

谨慎返回 Optional

  • 永远不要在返回 Optional 的方法中,返回null:违背 Optional本意。

方法注释

正确的开发规范必须在类、接口、构造方法、自定义方法中添加文档注释。

类、接口注释注意

  1. 对于类、接口来说,概要描述应该是一个名词短语,一个本身代表事物。

构造方法注释注意

  1. 同一类、接口中的两个成员变量、构造方法,不应该具有相同的概要描述。
  2. 对于构造方法、自定义方法来说,概要描述应该是一个完整的动词短语(包含任何动对象),一个具体执行的动作。

自定义方法注释注意

  1. 每一个参数都有一个@param注解。
  2. 自定义方法的返回值不是void的情况下,需要@return标签。
  3. 自定义方法抛出的每个异常都需要一个@throws标签。

泛型注释注意

  1. 文档中说明所有的类型参数。

枚举注释注意

  1. 为枚举类型编写文档时,需要确保在文档中说明常量、类型、任何共有的方法。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值