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

Jakarta @Nonnull注解在IntelliJ中不生效,传入null未抛异常

为什么Jakarta @Nonnull注解没生效?

@Nonnull注解本身不会自动在运行时做非空校验,核心原因有这几点:

  • 它本质是个编译期提示注解,只给IDE、静态代码分析工具(比如IntelliJ的代码检查、SpotBugs)用。比如在IntelliJ里传null时,编辑器会标黄警告,但这只是编码阶段的提醒,不会阻止程序运行,也不会在运行时抛出异常。
  • Jakarta官方的@Nonnull没有内置运行时校验逻辑,它的作用是传递“这个参数不能为null”的语义信息,给开发者和工具链做参考,不是用来自动生成校验代码的。
  • 要让它在运行时生效,得额外搭配AOP框架(比如AspectJ、Spring AOP)或者第三方校验库,通过动态代理或切面的方式,在方法调用前手动实现null检查逻辑。

解决办法

1. 手动加非空校验(最简单直接)

在方法开头自己判断参数是否为null,抛出异常:

import jakarta.annotation.Nonnull;

public class test89 {
    public String processString(@Nonnull String input) {
        if (input == null) {
            throw new IllegalArgumentException("input 参数不能为null");
        }
        return "Processed: " + input;
    }

    public static void main(String[] args) {
        test89 exampleService = new test89();
        String result = exampleService.processString(null);
        System.out.println(result);
    }
}

运行这段代码就会抛出IllegalArgumentException,符合预期的非空校验效果。

2. 用AspectJ实现自动校验

如果不想每个方法都手动写校验,可以用AspectJ定义切面,自动扫描所有带@Nonnull的参数并做检查:

import jakarta.annotation.Nonnull;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.reflect.MethodSignature;
import java.lang.reflect.Parameter;

@Aspect
public class NonNullValidationAspect {
    @Before("execution(* *(.., @jakarta.annotation.Nonnull (*), ..))")
    public void validateNonNullParameters(JoinPoint joinPoint) {
        Object[] args = joinPoint.getArgs();
        MethodSignature methodSignature = (MethodSignature) joinPoint.getSignature();
        Parameter[] parameters = methodSignature.getMethod().getParameters();

        for (int i = 0; i < parameters.length; i++) {
            if (parameters[i].isAnnotationPresent(Nonnull.class) && args[i] == null) {
                throw new IllegalArgumentException(parameters[i].getName() + " 不能为null");
            }
        }
    }
}

配置好AspectJ后,所有带@Nonnull注解的参数都会自动触发非空校验。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 23:25:03