Внешняя нулевая аннотация Eclipse для AbstractStreamEx.nonNull()
Рассмотрим следующий пример кода. Этот код использует Eclipse's @NonNull
а также @Nullable
аннотации для проверки null
s. К сожалению, 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', но это выражение имеет тип 'Function<@NonNull Integer, @NonNull Integer>'
Я хотел бы создать внешнюю аннотацию Eclipse на StreamExnonNull()
(или, точнее, AbstractStreamEx's nonNull()
) чтобы Eclipse знал, что значения в потоке не могут быть нулевыми.
Вот начало внешней аннотации Eclipse.
class one/util/streamex/AbstractStreamEx<TS>
nonNull
()TS;
()???;
Что я ставлю на ???
?
1 ответ
Для 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();