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

关于方法返回值@NotNull注解与代码合规性的疑问

关于方法返回值@NotNull注解与代码合规性的疑问

先把你提供的代码贴出来方便分析:

import org.jetbrains.annotations.NotNull;
public class TestClass {
  @NotNull StringBuffer met1(Integer a) {
    if (a == 3) throw new RuntimeException();
    return new StringBuffer("this");
  }
  public static void main(String[] args) {
    TestClass m = new TestClass();
    StringBuffer mmm = m.met1(3);
  }
}

嘿,我来给你拆解下这个问题哈:

首先,你说“方法可以潜在返回null”其实是个小误解~咱们逐行看met1方法的逻辑:

  • 当传入的a等于3时,方法直接抛出了RuntimeException,程序执行到这一步就直接终止了,根本走不到后面的return语句,所以这种情况下根本不会有返回值;
  • 其他参数情况,方法会返回一个全新的StringBuffer实例,绝对不会是null。

然后再说说@NotNull注解的公开契约:这个JetBrains的注解,核心是向调用者承诺只要方法正常执行完毕,返回的结果一定是非null的——它并不保证方法必须正常返回(也就是允许方法抛出异常来终止执行)。所以从这个角度看,met1方法其实没有违反@NotNull的契约,它的表现完全符合注解的承诺。

不过这段代码确实有两处不太规范的地方:

  • main方法里直接调用met1(3),运行时会直接抛出未捕获的异常导致程序崩溃,这显然不是合理的调用方式;
  • met1方法的参数校验逻辑不够友好,直接抛出未受检的RuntimeException,调用者如果没注意到这个逻辑,很容易踩坑,最好能通过Javadoc明确标注参数限制,或者声明受检异常让调用者必须处理。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 11:13:05