You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Java自定义CustomException类按抛出方法选择对应错误消息实现咨询

实现方案

第一步 优化自定义异常类

你现有代码里的错误消息属于全局固定常量,需要修改为public static final修饰,保证不可修改且无需实例化即可直接调用:

public class CustomException extends Exception{
    // 错误消息常量,静态全局不可变
    public static final String EXCEPTION_NAME = "[ERROR] 名称长度不能超过10个字符";
    public static final String EXCEPTION_YEAR = "[ERROR] 年份不能晚于当前年份";
    public static final String EXCEPTION_DESCRIPTION = "[ERROR] 描述长度不能超过50个字符";
    public static final String EXCEPTION_PRICE = "[ERROR] 价格不能为负数";

    public CustomException(){
        super();
    }

    public CustomException(String msg){
        super(msg);
    }
}

第二步 编写包含4个方法的业务类

每个方法在对应校验逻辑不通过时,抛出携带对应错误消息的CustomException即可:

public class ProductService {
    // 校验名称的方法
    public void validateName(String name) throws CustomException {
        if (name.length() > 10) {
            // 抛出对应名称异常的消息
            throw new CustomException(CustomException.EXCEPTION_NAME);
        }
        // 其他正常逻辑
    }

    // 校验年份的方法
    public void validateYear(int year) throws CustomException {
        int currentYear = java.time.Year.now().getValue();
        if (year > currentYear) {
            throw new CustomException(CustomException.EXCEPTION_YEAR);
        }
        // 其他正常逻辑
    }

    // 校验描述的方法
    public void validateDescription(String desc) throws CustomException {
        if (desc.length() > 50) {
            throw new CustomException(CustomException.EXCEPTION_DESCRIPTION);
        }
        // 其他正常逻辑
    }

    // 校验价格的方法
    public void validatePrice(double price) throws CustomException {
        if (price < 0) {
            throw new CustomException(CustomException.EXCEPTION_PRICE);
        }
        // 其他正常逻辑
    }
}

第三步 调用测试示例

public class Main {
    public static void main(String[] args) {
        ProductService service = new ProductService();
        try {
            service.validatePrice(-10.0);
        } catch (CustomException e) {
            // 打印对应错误消息:[ERROR] 价格不能为负数
            System.out.println(e.getMessage());
        }
    }
}

实现逻辑说明

每个方法对应自己的业务校验场景,抛出异常时直接传入CustomException中对应场景的静态常量作为构造参数即可自动匹配正确的错误消息,无需额外判断逻辑。


内容的提问来源于stack exchange,提问作者Isabel Lopez

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 18:15:03