2014-11-04 84 views
0

我怎樣才能改變Java運算符? :

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); 
+1

你爲什麼需要這個?感覺它會極大地犧牲可讀性。 – 2014-11-04 06:50:26

+0

刪除'null''xmlComboBoxValues.get(0)== null'的括號,它應該沒問題。 – Jens 2014-11-04 06:50:50

+1

三元運算符中的表達式必須導致相同的類型,並且它不能是'void'方法調用,所以你不能這樣做。 – icza 2014-11-04 06:52:04

回答

3

你不能這樣做,因爲與在setNull()JavaTernary運營商void方法。

§JLS.15.25

ConditionalExpression: 
ConditionalOrExpression 
ConditionalOrExpression ? Expression : ConditionalExpression 

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

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

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

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

5

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

  • 的方法有void返回類型
  • 不能使用條件表達式爲聲明

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

您的原始代碼已經習慣了:如果條件爲真,您希望執行一條語句。否則,你想執行一個不同的語句。適用於if/else

+0

感謝Jon,我有10個組合框可以作爲表格的過濾器。每個組合框都有一個'if/else'使我的代碼看起來很龐大,所以我想把所有的代碼都放在一行中, :運營商。 – 2014-11-04 06:59:47

+0

@RicoStrydom:聽起來就像你應該把你的組合框放在一個集合中,你只需要一次,在一個循環中獲得該代碼。或者,如果您不能這樣做,請將通用代碼提取爲您爲每個組合框調用的方法。 – 2014-11-04 07:07:16