2 x @NotNull ==太多了?

时间:2019-02-13 19:09:34

标签: 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提供了一个默认的空字符串值,否则这两个注释是相同的...为什么要同时指定这两个注释?

1 个答案:

答案 0 :(得分:1)

我们对IntelliJ的注释存在的问题是,启用字节码检测后,它将添加一个引发IllegalArgumentException的检查。但是,当代码发布或在其他上下文中运行时,它将触发NullPointerException

由于这个原因,我们在许多代码库中添加了自己的注释,因此在IntelliJ中将进行代码分析检查,而无需添加额外的运行时检查。

很可能我们应该只在各处使用批注,以使抛出的异常具有确定性。