我想给Java 8带来一个实用方法。命名的方法max
定义如下:
@SafeVarargs
public static final <E extends Comparable<E>> E max(final E... elements) {
E result = null; // error
for(final E e : elements) {
if(result == null || result.compareTo(e) < 0) {
result = e;
}
}
return result;
}
现在 Eclipse 显示错误:
空类型不匹配(类型注释):
null
与自由类型变量不兼容E
。
我原以为添加@Nullable
到result
应该删除错误的定义,但显然情况并非如此。即使我另外用 注释整个方法@Nullable
,错误仍然存在。
顺便说一句,我使用的是 FindBugs 的 jsr-305.jar,并已将 Eclipse 配置为javax.annotation.Nonnull
尊重javax.annotation.Nullable
. 编辑:我在 Lubuntu 上运行 Eclipse Luna 4.4.2 和 Oracle JDK 8 build 1.8.0_25-b17。
现在我的问题是:错误来自哪里?如何在保持注释和泛型类型定义的好处的同时摆脱它?
编辑:我刚刚添加了一个示例项目,其中使用了默认的 eclipse 注释,它似乎有点工作(除了在 处生成警告,result == null
因为它错误地推断出结果只能在该点为空)。所以这似乎是非默认注释类的 Eclipse 问题。我用我自己的 Eclipse 注释副本重新测试了它Nullable
,并得到了与上面相同的错误。