AbstractStreamEx.nonNull()的Eclipse外部空注释

时间:2016-11-23 21:23:11

标签: java eclipse streamex external-annotations

考虑以下示例代码。此代码使用Eclipse的@NonNull@Nullable注释来检查null。不幸的是,Eclipse标记了行map(toNonNull)上的错误。

import java.util.function.Function;
import org.eclipse.jdt.annotation.NonNull;
import org.eclipse.jdt.annotation.Nullable;
import one.util.streamex.StreamEx;

Function<@NonNull Integer, @Nullable Integer> toNull;
Function<@NonNull Integer, @NonNull Integer> toNonNull;

toNull    = value -> value;
toNonNull = value -> value;

StreamEx.
   of(1, 2, 3, 4, 5, 6).
   map(toNull).
   nonNull().
   map(toNonNull).   // Error is here
   count();

以下是错误消息:

  

空类型不匹配(类型注释):必需   '功能'   但这个表达式有类型   'Function&lt; @NonNull Integer,@ NonNull Integer&gt;'

我想在StreamExnonNull()(或更准确地说AbstractStreamExnonNull())上创建Eclipse外部注释,以便Eclipse知道这些值在流中不能为空。

这是Eclipse External Annotation的开始。

class one/util/streamex/AbstractStreamEx<TS>

nonNull
 ()TS;
 ()???;

我为???做了什么?

1 个答案:

答案 0 :(得分:0)

对于StreamEx 0.6.4或更新版本,StreamEx会覆盖nonNull(),以便可以使用以下外部注释:

nonNull
 ()Lone/util/streamex/StreamEx<TT;>;
 ()L1one/util/streamex/StreamEx<T1T;>;

对于StreamEx 0.6.3或更早版本,一个丑陋的解决方案是更改Java代码。这适用于编译器错误。

StreamEx.
   of(1, 2, 3, 4, 5, 6).
   map(toNull).
   nonNull().
   map(item -> item != null ? toNonNull.apply(item) : null).
   count();