只是为了好玩,我试图替换:
if (set1.add(x) == false)
{
set2.add(x);
}
和:
set1.add(x) || set2.add(x);
但是,Eclipse抱怨:
Syntax error on token "||", invalid AssignmentOperator
The left-hand side of an assignment must be a variable
任何人都可以对这些错误消息有所了解吗?他们对我来说没有多大意义。
到目前为止,有很多答案,但我同意波希米亚的答案,最简单的简化方法是(虽然不使用||
):
if ( !set1.add(x) ) set2.add(x);
但这并不能解释错误消息。MustafaGenç在这方面做得比较接近,但是我认为值得在这里查看语言规范。exp1 || exp2
是一个表达式,这里的问题是您试图在需要声明的上下文中使用它。根据14.8。表达式语句,可以在通过附加分号来期望语句的地方使用某些类型的表达式:
14.8。表达陈述
某些类型的表达式可以通过在其后加上分号来用作语句。
ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression
通过评估表达式来执行表达式语句;如果表达式具有值,则将值丢弃。
但是,您无法执行要执行的操作的原因是,并非每个表达式都可以用作语句。但是,它确实讨论了解决此问题的一些方法。在规范的同一部分(添加了重点):
与C和C ++不同,Java编程语言仅允许将某些形式的表达式用作表达式语句。请注意,Java编程语言不允许使用“强制转换为
void
”-void
不是一种类型-因此,编写表达式语句的传统C技巧如下:(void)... ; // incorrect!
不起作用。另一方面,Java编程语言允许在expressions语句中使用所有最有用的类型的表达式,并且它不需要用作表达式语句的方法调用来调用void方法,因此几乎不需要这种技巧。如果需要技巧,则可以改用赋值语句(第15.26节)或局部变量声明(第14.4节)。
这种方法是Reik Val的答案中第一个被截断的方法:
boolean temp = set1.add(x) || set2.add(x);
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句