java注解less_关于java:未注释的方法会覆盖以@NotNull注释的方法

我正在实现一个自定义数据结构,该结构为我提供了集合的某些属性和列表的其他属性。 但是对于大多数实现的方法,我在Java 7上的IntelliJ IDEA中收到以下奇怪警告:

Not annotated method overrides method annotated with @NotNull

编辑:以下代码与问题无关,而是原始问题的一部分。 由于IntelliJ中的错误而显示此警告。 请参阅答案(希望)解决您的问题。

我还没有找到任何相关的信息,也不确定是否真的缺少某种检查,但是我浏览了ArrayList和List接口的源代码,看不到什么 这个警告实际上是关于。 在引用列表字段的每个已实现方法上。 这是我制作的课程的摘录:

public class ListHashSet< T > implements List< T >, Set< T > {

private ArrayList< T > list;

private HashSet< T > set;

/**

* Constructs a new, empty list hash set with the specified initial

* capacity and load factor.

*

* @param      initialCapacity the initial capacity of the list hash set

* @param      loadFactor      the load factor of the list hash set

* @throws     IllegalArgumentException  if the initial capacity is less

*               than zero, or if the load factor is nonpositive

*/

public ListHashSet(int initialCapacity, float loadFactor) {

set = new HashSet<>(initialCapacity, loadFactor);

list = new ArrayList<>(initialCapacity);

}

...

/**

* The Object array representation of this collection

* @return an Object array in insertion order

*/

@Override

public Object[] toArray() {  // warning is on this line for the toArray() method

return list.toArray();

}

编辑:我在类中有这些额外的构造函数:

public ListHashSet(int initialCapacity) {

this(initialCapacity, .75f);

}

public ListHashSet() {

this(16, .75f);

}

Intellij有其自己的NotNull注释类。 我想知道它是否会对返回list.toArray有所帮助,这是您唯一具有NPE潜力的地方

列表字段不能为空。 除非我错过了什么?

编译器添加了一个隐式ListHashSet()构造函数

尝试intellij论坛/支持?

我试图在IntelliJ论坛上询问,但无果而终。 这可能是IntelliJ中的错误

有时,它有助于添加可为空性检查。 就我而言,在接口和实现类包上都有一个@ParametersAreNonnullByDefault批注。 但是,IDEA警告我,除非在实现类中为参数添加Preconditions.checkNotNull(...),否则未注释重写的方法参数。

尝试将@Nonnull(javax.annotation.Nonnull)添加到toArray方法。

添加此注释后,警告对我不见了。 我认为警告消息是不正确的,它表示缺少@NotNull。

噢,老兄! 起作用了! 因此,您建议警告说" @NotNull丢失"实际上是警告消息中的错字吗?

是的,我想是这样。

我同意这是Nonnull与NotNull的错字。 但是,似乎还存在其他一些错误。 我实现了一个自定义Set,它抱怨Iterator和toArray方法没有注释。 但是,从JDK来看,Set或Collection的接口上似乎没有任何此类注释。

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/0eb62e4a75e6/src/share/classes/java/util/Set.java

http://hg.openjdk.java.net/jdk8u/jdk8u/jdk/file/0eb62e4a75e6/src/share/classes/java/util/Collection.java

奇怪的。

无论如何,另一个选择是将@SuppressWarnings标记添加到您的类或方法中:

@SuppressWarnings(" NullableProblems")

IIRC我们使用的是Oracle JDK,因此OpenJDK的实现可能有所不同

+1表示正确的@SuppressWarnings指令,这似乎是不依赖依赖项的唯一选择。

尝试添加:

private ListHashSet() {}

我实际上有这些附加的构造函数(在原始问题中已更新)^

这不是原因,但您认为您可能想在此处设置列表? 私有ArrayList < T > getList(){返回列表!= null? list:new ArrayList < T >(); }

我也尝试过,但是没有改变任何东西。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值