考虑以下示例代码。此代码使用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;'
我想在StreamEx的nonNull()
(或更准确地说AbstractStreamEx的nonNull()
)上创建Eclipse外部注释,以便Eclipse知道这些值在流中不能为空。
这是Eclipse External Annotation的开始。
class one/util/streamex/AbstractStreamEx<TS>
nonNull
()TS;
()???;
我为???
做了什么?
答案 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();