【问题标题】:How can I throw my own custom message in @NonNull exception using lombok?如何使用 lombok 在@NonNull 异常中抛出我自己的自定义消息?
【发布时间】:2017-10-24 15:25:09
【问题描述】:

我开始使用 lombok 项目,我有一个疑问。假设我有一个带有一个参数method(@NonNull arg) 的方法。如果我用空参数method(null) 调用该方法,我将得到以下异常:java.lang.NullPointerException: arg

但是让我们假设我希望该异常消息说类似arg cannot be null 而不是另一个(无论该消息的含义如何,我只想知道如何使用 @NonNull 注释自定义异常消息)。

谢谢!

【问题讨论】:

    标签: java annotations lombok


    【解决方案1】:

    你不能。

    但是,您可以将 lombok 配置为引发 IllegalArgumentException。那将有消息arg is null

    要对此进行配置,请将lombok.nonNull.exceptionType = IllegalArgumentException 添加到您的lombok.config 文件中。

    披露:我是龙目岛开发人员。

    【讨论】:

    • 您认为添加它不是一个不错的功能吗?我的意思是想象该方法有两个参数方法(arg1,arg2),我想抛出一个异常,说“arg1 和 arg2 是强制性的”。
    • 如果我想抛出一个用户定义的异常怎么办?能做到吗?怎么做?
    【解决方案2】:

    根据Lombok's documentation@NonNull 注释只是在函数顶部添加一个 if 语句来检查它是否为空。所以如果你不想使用任何其他库,你可以自己做:

    class NullArgumentException extends IllegalArgumentException {
    
        public NullArgumentException() {
            super("arg cannot be null");
        }
    }
    
    public class Test {
    
        public static void main(String[] args) {
    
            try {
                foo(null);
            } catch(IllegalArgumentException e) {
                // or System.out.println(e.getMessage())
                e.printStackTrace();
            }
        }
    
        public static void foo(Integer i) throws IllegalArgumentException {
            if(i == null) throw new NullArgumentException();
        }
    }
    

    【讨论】:

    【解决方案3】:

    Lombok @NonNull 不允许这样做。
    尝试使用 javax.validation.constraints 包中的 @NotNull(message = "arg cannot be null")

    【讨论】:

    • 但是您必须手动验证您的对象,而 Lombok 的 Nonull 会对方法调用进行自动验证检查。
    猜你喜欢
    • 1970-01-01
    • 2017-02-28
    • 1970-01-01
    • 2023-03-05
    • 1970-01-01
    • 2019-12-06
    • 1970-01-01
    • 2011-09-18
    • 1970-01-01
    相关资源
    最近更新 更多