簡體   English   中英

是否有一種優雅的方法來初始化並使用Optional來返回可空字段的值

[英]Is there an elegant way to initialize and return value of nullable field using Optional

我有一段代碼返回一個字段的值,但也初始化它:

public Observable<Integer> asObservable() {
    if (subject == null) {
        subject = BehaviorSubject.createDefault(0);
    }
    return subject;
}

我正在嘗試使用Optional類來避免if語句:

public Observable<Integer> asObservableWithOptional() {
    Optional.ofNullable(subject)
            .executeIfAbsent(() -> BehaviorSubject.createDefault(0));
    return subject;
}

Hovewer我對這段代碼仍然不滿意。 有沒有辦法只用一個語句把這個方法變成一個? 類似於以下內容將無法正常工作,因為在調用ofNullable工廠方法期間尚未初始化subject

    return Optional.ofNullable(subject)
            .executeIfAbsent(() -> BehaviorSubject.createDefault(0))
            .get();

注意:我沒有使用原始Java8 API,而是使用此API的aNNiMON端口https://github.com/aNNiMON/Lightweight-Stream-API

怎么樣

return subject = Optional.ofNullable(subject).orElseGet(() -> BehaviorSubject.createDefault(0));

當然,你可以使用三元條件運算符而不是創建一個Optional來立即丟棄它:

return subject != null ? subject : (subject = BehaviorSubject.createDefault(0));

我會建議這樣的事情:

return (subject == null ? (subject = BehaviorSubject.createDefault(0)) : subject);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM