簡體   English   中英

Java 運算符 ? :

[英]Java operator ? :

我該如何改變

if(xmlComboBoxValues.get(0) == null){
    cstmt.setNull(i++,java.sql.Types.NVARCHAR); 
}
else {  
    cstmt.setString(i++, (String) xmlComboBoxValues.get(0));            
}

作為一個 ? : 用java表達?

這是我所擁有的,但語法顯然是錯誤的。

xmlComboBoxValues.get(0) == (null) ? cstmt.setNull(i++,java.sql.Types.NVARCHAR) : cstmt.setNull(i++,java.sql.Types.NVARCHAR);

你不能這樣做有兩個原因:

  • 這些方法有一個void返回類型
  • 您不能將條件表達式用作語句

這些都是同一原因的症狀:您在濫用運算符。 運算符的目的是選擇兩個表達式中的哪一個作為整個表達式的結果......然后用於其他內容。 計算表達式與執行語句的目的略有不同。

您的原始代碼已經是慣用的:如果條件為真,您希望執行一個語句。 否則,您要執行不同的語句。 完美的if / else

由於setNull()void方法,因此您無法使用Java Ternary運算符執行此操作。

§JLS.15.25

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression

條件運算符在語法上是右結合的(它從右到左分組)。 因此,a?b:c?d:e?f:g 的含義與 a?b:(c?d:(e?f:g)) 相同。

條件運算符具有三個操作數表達式。 ? 出現在第一個和第二個表達式之間,並且 : 出現在第二個和第三個表達式之間。

第一個表達式必須是 boolean 或 Boolean 類型,否則會發生編譯時錯誤。

第二個或第三個操作數表達式調用 void 方法是編譯時錯誤。

暫無
暫無

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

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