不是一个语句(编译器错误Java / Android)

时间:2016-06-06 07:37:19

标签: java android compiler-errors

我正在尝试使用简单的if语句?图案。导致“不是声明” - 错误。有人可以向我解释为什么使用正常的if语句不会发生这种情况吗?

错误:

cursor.isNull(0) ? insert_SQL_RSServer.bindNull(0) : insert_SQL_RSServer.bindLong(0, cursor.getLong(0)); // id

没有错误:

if(cursor.isNull(0))
    insert_SQL_RSServer.bindNull(0);
else
    insert_SQL_RSServer.bindLong(0, cursor.getLong(0));

这完全是同样的行为......

2 个答案:

答案 0 :(得分:5)

三元条件运算符是一个表达式,它必须有一个返回类型,它由第二个和第三个操作数的类型决定。

因此,如果您的bindNull()bindLong()方法具有void返回类型,则不能在此运算符中使用它们。

答案 1 :(得分:1)

在Java中,表达式不是语句,除了以下情况:

StatementExpression:
    Assignment
    PreIncrementExpression
    PreDecrementExpression
    PostIncrementExpression
    PostDecrementExpression
    MethodInvocation
    ClassInstanceCreationExpression 

参考:JLS 14.8

三元表达式不是上述之一。

  

谢谢!但这仍然是废话......但是..

就是它的方式。这就是Java的指定方式。

这可能只是一个设计选择,反映了语言设计师的个人品味/简洁观点。或者,可能有更深层次的理由或选择理由;例如它可能解决了模糊解析的一些问题。