Java 2 x@NotNull==太多?

Java 2 x@NotNull==太多?,java,intellij-idea,chronicle,Java,Intellij Idea,Chronicle,参数同时使用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 sec

参数同时使用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 {
}


因此Jetbrains
@NotNull
提供了一个默认的空字符串值,否则这两个注释是相同的……那么为什么要同时指定这两个呢?

IntelliJ注释的问题是,当启用字节码插装时,它会添加一个检查,该检查抛出一个
IllegalArgumentException
。但是,当代码被释放或在另一个上下文中运行时,它会触发
NullPointerException

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


最有可能的情况是,我们应该在任何地方都使用注释,以使抛出的异常具有确定性。

最有可能的情况是复制注释以获得两者的好处。jetbrains one可能使IntelliJ能够在检测到有人使用
null
调用该方法时提供更好的代码帮助。对于OpenHFT来说可能也是如此,不管它们对该注释有什么好处。除此之外,除了纯粹的推测之外,我们没有什么可以确定的了。但是你的注释是在IntelliJ之前添加的。我不明白但你是这方面的权威所以heh@Mat我们已经讨论过这一点,认为我们应该在maven构建中使用IntelliJ的注释,或者根本不使用,因此我们将它们添加到构建中并删除注释。
package org.jetbrains.annotations;

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