2016-11-23 18 views
1

次のサンプルコードを検討してください。このコードでは、nullをチェックするために、Eclipseの@NonNull@Nullableアノテーションを使用しています。残念ながら、Eclipseはmap(toNonNull)という行にエラーを表示します。 '関数' 必要はなく、この表現は '>機能< @NonNull整数、@NonNull整数' を入力していますEclipse AbstractNextNull()の外部Null注釈

のNull型の不一致(型注釈):ここで

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(); 

はエラーメッセージです

私はStreamExさんnonNull()にEclipseの外部注釈を作成したいと思います(またはより正確にAbstractStreamExnonNull())、ストリームの値がnullでないことをEclipseが認識するようにします。

ここでEclipse外部注釈の開始です。

class one/util/streamex/AbstractStreamEx<TS> 

nonNull 
()TS; 
()???; 

???については何を入力しますか? StreamEx 0.6.4以降の場合

答えて

0

は、1には、以下の外部アノテーションを使用することができるようStreamExはnonNull()を上書きします:StreamEx 0.6.3以前の場合は

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

を、1つの醜いソリューションは、Javaコードを変更することです。これは、コンパイラのエラーを回避します。

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