1

次のコード例を検討してください。このコードは、Eclipse@NonNull@Nullableアノテーションを使用してnulls をチェックします。残念ながら、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();

エラーメッセージは次のとおりです。

Null 型の不一致 (型注釈): 'Function' が必要ですが、この式の型は 'Function<@NonNull Integer, @NonNull Integer>' です

StreamExnonNull() (またはより正確にはAbstractStreamEx )に Eclipse 外部アノテーションを作成して、ストリーム内のnonNull()値を null にすることはできないことを Eclipse が認識できるようにしたいと考えています。

これが Eclipse 外部注釈の始まりです。

class one/util/streamex/AbstractStreamEx<TS>

nonNull
 ()TS;
 ()???;

何を入れ???ますか?

4

1 に答える 1

0

StreamEx 0.6.4 以降の場合、StreamExnonNull()は次の外部注釈を使用できるようにオーバーライドします。

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

StreamEx 0.6.3 以前の場合、厄介な解決策の 1 つは、Java コードを変更することです。これにより、コンパイラ エラーが回避されます。

StreamEx.
   of(1, 2, 3, 4, 5, 6).
   map(toNull).
   nonNull().
   map(item -> item != null ? toNonNull.apply(item) : null).
   count();
于 2016-11-23T21:31:54.050 に答える