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
提供了一个默认的空字符串值,否则这两个注释是相同的...为什么要同时指定这两个注释?
答案 0 :(得分:1)
我们对IntelliJ的注释存在的问题是,启用字节码检测后,它将添加一个引发IllegalArgumentException
的检查。但是,当代码发布或在其他上下文中运行时,它将触发NullPointerException
。
由于这个原因,我们在许多代码库中添加了自己的注释,因此在IntelliJ中将进行代码分析检查,而无需添加额外的运行时检查。
很可能我们应该只在各处使用批注,以使抛出的异常具有确定性。