2016-11-23 52 views
1

請考慮以下示例代碼。此代碼使用Eclipse的@NonNull@Nullable註釋來檢查null s。不幸的是,Eclipse在行map(toNonNull)上標記了一個錯誤。AbstractStreamEx.nonNull的Eclipse外部空註釋()

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

這裏的錯誤消息:

空類型不匹配(類型註釋):所需 '函數' 但這個表達式的類型爲 '功能< @NonNull整數,@NonNull整數>'

我想創建一個Eclipse外部註釋StreamExnonNull()(或更精確地說AbstractStreamExnonNull()),以便Eclipse知道流中的值不能爲空。

以下是Eclipse外部註釋的開始。

class one/util/streamex/AbstractStreamEx<TS> 

nonNull 
()TS; 
()???; 

我爲???投入了什麼?

回答

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