2014-11-04 86 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