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
相关产品推荐
相关产品推荐

