Java操作员?:

Java操作员?:,java,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)

我怎样才能改变

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

由于
setNull()
void
方法,所以在
Java
中不能使用
triangal
操作符来实现这一点

发件人:

条件运算符在语法上是右关联的(it) 从右到左)。因此,a?b:c?d:e?f:g的意思与 a?b:(c?d:(e?f:g))

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

第一个表达式的类型必须为boolean或boolean,或 发生编译时错误

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


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

  • 这些方法具有
    void
    返回类型
  • 不能将条件表达式用作语句
这两种症状的原因是一样的:你误用了操作员。运算符的目的是选择两个表达式中的哪一个作为整体表达式的结果。。。然后用于其他用途。计算表达式与执行语句的目的略有不同


您的原始代码已经是惯用的:如果条件为true,则希望执行一条语句。否则,您需要执行不同的语句。非常适合
if
/
else

为什么需要这个?感觉它将极大地牺牲可读性。删除
null
xmlcomboxvalues.get(0)=null
周围的括号,应该可以。三元运算符中的表达式必须产生相同的类型,并且不能是
void
方法调用,所以你不能这么做。这个问题似乎离题了,因为它是在问不可能的事情。@EJP问不可能的事情本身不应该离题。“这是不可能的,因为…”是一个有效的答案。谢谢Jon,我有10个组合框,它们可以作为表格的过滤器。每个组合框都有一个
if/else
,这使得我的代码看起来很笨重,所以我想尝试使用?:运算符。@RicoStrydom:听起来你应该把组合框放在一个集合中,你只需要在一个循环中有一次代码。或者,如果不能这样做,则将公共代码提取到为每个组合框调用的方法中。
ConditionalExpression:
ConditionalOrExpression
ConditionalOrExpression ? Expression : ConditionalExpression