簡體   English   中英

我可以在JAVA的非分配情況下使用條件運算符嗎?

[英]Can I use the Conditional Operators in a non-assignment situation in JAVA?

如果分配情況很簡單,

result = testCondition ? value1 : value2;

但是,如果我想使用它而不是if語句呢? 例如,在記錄情況下:

logger.shouldDebbug ? logger.log("logging") : (what to do if not?);

如果在假的情況下我什么都不做,我還能使用這個操作員嗎?

是的,如果你把它們包裹在一個返回的函數中,你可以,但不,你不應該。

在您的記錄器示例中,讓記錄器輸出為void,在未啟用調試時丟棄輸入。

您不希望使用所有這些日志記錄檢查來謎題。 盡可能少地進行檢查。

如果啟用了調試,則可以檢查logger.log函數,或者使用除接受輸入之外什么都不做的虛擬模擬替換記錄器並立即丟棄它。

如果您使用log4j之類的標准日志記錄框架,則可以設置調試級別,其中您只顯示信息或更嚴重,僅警告或更嚴重,僅錯誤或更嚴重。

其他“快速”檢查也是如此。 如果您發現自己經常使用某種模式,請在需要時使用靜態方法為其編寫實用程序類,這樣您就有了一個地方,您必須更改內容,而不是在進行時必須更新的200個代碼點生產。

如果你堅持,你可以使用它,通過定義一個無意義的變量並利用函數的副作用 ,但這不是一個非常好的編碼習慣。 這純粹是一種解決方法

例如:

public static boolean test() {
    return 1>0;
}

public static int success() {
    System.out.println("true");
    return 0; // has no meaning whatsoever
}

public static int fail() {
    System.out.println("false");
    return 0; // has no meaning whatsoever
}

public static void main(String[] args) {
    int meaningless = test() ? success() : fail();
}

一切都在評論中解釋,所以我在這里只提出一些想法:

public class Ternary {
    private final boolean condition;
    private Ternary(boolean condition) { this.condition = condition; }
    public static Ternary of(boolean condition) { return new Ternary(condition); } 
    public Ternary onTrue(Runnable r) { if (condition) { r.run(); } return this; }
    public Ternary onFalse(Runnable r) { if (!condition) { r.run(); } return this; }
}

用法示例:

Ternary.of(o != null).onTrue(() -> doSomething()).onFalse(() -> doSomethingElse());

但更簡單的是寫:

if (o != null) { doSomething(); } else { doSomethingElse(); }

暫無
暫無

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

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