java - 2 x @NotNull == 太多了?

标签 java intellij-idea chronicle

BytesUtil.bytesEqual参数同时使用 Jetbrains @NotNull 和 OpenHFT @NotNull 注释相同的参数:

public static boolean bytesEqual(
        @org.jetbrains.annotations.NotNull @NotNull RandomDataInput a, long offset,
        @org.jetbrains.annotations.NotNull @NotNull RandomDataInput second, long secondOffset, long len)
        throws BufferUnderflowException {

这看起来是多余的——是否有任何理由同时使用两者?这两个注释(当前)定义为:

package net.openhft.chronicle.core.annotation;

@Documented
@Retention(CLASS)
@Target({METHOD, FIELD, PARAMETER, LOCAL_VARIABLE})
public @interface NotNull {
}

package org.jetbrains.annotations;

@Documented
@Retention(CLASS)
@Target({METHOD, FIELD, PARAMETER, LOCAL_VARIABLE})
public @interface NotNull {
  String value() default "";
}

所以 Jetbrains @NotNull 提供了一个默认的空字符串值,否则这两个注解是相同的...那么为什么要指定两者呢?

最佳答案

我们使用 IntelliJ 注释时遇到的问题是,当启用字节码检测时,它会添加一个检查,该检查会抛出 IllegalArgumentException。但是,当代码在另一个上下文中发布或运行时,它反而会触发 NullPointerException

出于这个原因,我们在大部分代码库中添加了我们自己的注释,这样就可以在 IntelliJ 中进行代码分析检查,而无需添加额外的运行时检查。

很可能我们应该只在任何地方使用我们的注释来使抛出的异常具有确定性。

关于java - 2 x @NotNull == 太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54677678/

相关文章:

java - Wildfly @Remote 接口(interface) JNDI 在同一服务器中的 2 个耳朵之间查找

java - 当我收到错误 "compiled by a more recent version of the Java Runtime (class file version 55.0)..."时如何将 JRE 或 JDK 设置为 Java 11 for IntelliJ

java - Gradle 可以在没有 main() 的情况下执行 TornadoFX 应用程序,而 IntelliJ 不能......为什么?

java - 历史记录队列不释放第一个文件

java - 从 Eclipse 启动应用程序时如何启动 java 控制台?

java - 使用 jsoup 或 regex 提取 header 标签之间的 html 标签

java - Maven:运行程序的生命周期阶段?

git - 尝试签署提交 (GPG) 时,IntelliJ 无法提交更改

java - Chronicle Queue : blockSize, 索引计数和大小指导

java - 可选择的编年史索引和数据文件