我有这个package-info.java在我的项目的根包:

/**
 In this project, parameters are assumed to be non-null by default.
 If a parameter may be null, you should annotate it with `@Nullable`.
 This file added to tell IDEA about our nullability approach.
 `ParametersAreNonnullByDefault` specifies this approach, but apparently only
 works at the package level, but DefaultQualifier specifies `Nonnull` for all
 packages underneath.
 */
@DefaultQualifier(Nonnull.class)
@javax.annotation.ParametersAreNonnullByDefault
package kopi.apisvc;

import org.checkerframework.framework.qual.DefaultQualifier;

import javax.annotation.Nonnull;

下面的演示代码是问题的一个例子,我不想改变代码的行为,我只想让Idea不显示警告.我不想重构为使用Optional<>,也不想使用会改变代码行为的Objects.nonNull()之类的东西.

  public static void doSomething(){
    @Nullable String value = null;
    var formattedValue = formatThing("", value);
    System.out.println(formattedValue);
  }

  public static String formatThing(Object... elements){
    // implementation that handles null value array elements properly
  }

当将空值传递给FormatThing()方法时,IntelliJ Idea会显示一条警告,说明是Passing 'null' argument to parameter annotated as @NotNull.但是,这不是问题,因为该方法旨在处理其元素的空值.

如何判断数组的元素值是否允许为空?

在元素声明上加上@Nullable不是一个有效的答案,因为:

  • 它指示数组本身可能为空(这不是本意)
  • 它无论如何都不能解决问题--IDEA仍然显示警告.

我不想在调用带有可能为空元素的方法的任何地方添加禁止显示警告.


版本

  • Java :21
  • IntelliJ IDEA:2023.3.3

推荐答案

感谢John Bollinger让我走上了正确的道路--诀窍是重置感兴趣方法的默认设置.

仅对于我希望元素可为空的这一种方法,将@DefaultQualifier设置为可为空,然后显式地将输入/输出参数设置为非空:

  @DefaultQualifier(Nullable.class)
  public static @Nonnull String formatThing(@Nonnull Object... elements){
    // implementation that handles null value array elements properly
    return "";
  }

Java相关问答推荐

使用Apache Poi MQLSlideShow,在XSLFTable表中,我们可以在文本段落后面的每个单元格中包含圆角矩形吗?

使用包私有构造函数强制子类Java类

Oracle DUAL表上使用DDL时jOOQ问题的解析'

如何转换Tue Feb 27 2024 16:35:30 GMT +0800 String至ZonedDateTime类型""

使用java访问具体子类特定方法的最佳方法是什么?

为什么我们不能实现两个接口,其中一个接口有相同的签名,其中一个接口有默认的实现在java?'

JVM会优化这个数学运算吗?

SpringBootreact 式Web应用程序的Spring Cloud Configer服务器中的资源控制器损坏

Java中如何根据Font.canDisplay方法对字符串进行分段

对于几乎不涉及逻辑的请求,您是否应该使用命令模式?

SpringBoot+Java 17@Valid未验证POJO

用OSQL创建索引

使SLF4J在Android中登录到Logcat,在测试中登录到控制台(Gradle依赖问题)

具有最大共同前景像素的图像平移优化算法

如何调整JButton的大小以适应图标?

如何使用Rascal Evaluator从编译的JAR访问Rascal函数?

Android上的SQLite:Android.database.SQLite.SQLiteReadOnlyDatabaseException:try 写入只读数据库(代码1032 SQLite_readonly_DBMOVED)

使用DynamoDB增强客户端时未更新属性

为什么child-pom会创建一个新版本

单例模式中热切初始化和惰性初始化的区别