考虑下面的示例代码。这段代码使用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<@NonNull整数,@NonNull Integer>”
我想在StreamEx的nonNull() (或者更准确地说,是AbstractStreamEx的nonNull())上创建一个,这样Eclipse就会知道流中的值不能为null。
这里是Eclipse外部注释的开始。
class one/util/streamex/AbstractStreamEx<TS>
nonNull
()TS;
()???;我给???放了什么?
发布于 2016-11-23 21:31:54
对于StreamEx 0.6.4或更高版本,StreamEx重写nonNull(),以便可以使用以下外部注释:
nonNull
()Lone/util/streamex/StreamEx<TT;>;
()L1one/util/streamex/StreamEx<T1T;>;对于Java0.6.3或更高版本,一个难看的解决方案是更改StreamEx代码。这可以避免编译器错误。
StreamEx.
of(1, 2, 3, 4, 5, 6).
map(toNull).
nonNull().
map(item -> item != null ? toNonNull.apply(item) : null).
count();https://stackoverflow.com/questions/40774367
复制相似问题