Java运营商? :

时间:2014-11-04 06:49:02

标签: 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);

2 个答案:

答案 0 :(得分:5)

你不能这样做有两个原因:

  • 这些方法的返回类型为void
  • 您不能将条件表达式用作语句

这些都是同一原因的症状:您滥用操作员。运算符的目的是选择使用两个表达式中的哪一个作为整体表达式的结果......然后将其用于其他内容。计算表达式与执行语句的目的略有不同。

您的原始代码已经是惯用的:如果条件为真,您想要执行一个语句。否则,您要执行不同的语句。适合if / else

答案 1 :(得分:3)

由于TernaryJava方法,setNull()中的void运算符无法做到这一点。

来自§JLS.15.25

ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression
  

条件运算符在语法上是右关联的(它是组合的   右到左)。因此,a?b:c?d:e?f:g表示与...相同   A B:(2 C d:(E F:G))。

     

条件运算符有三个操作数表达式。 ?出现   在第一个和第二个表达式之间,和:出现在   第二和第三个表达。

     

第一个表达式必须是boolean或Boolean类型,或者是a   发生编译时错误。

     

第二个或第三个操作数是编译时错误   表达式是一个void方法的调用。