java中的逻辑运算

java中的逻辑运算,java,android,conditional-statements,logical-operators,Java,Android,Conditional Statements,Logical Operators,我一直试图以更具体的方式实现以下条件: if (x > 1) doSomething(); else { doSomethingElse(); } 要将其编码为: (x > 1) ? doSomething() : doSomethingElse(); 这根本不可能吗?并非完全通用;三元中的参数(形式上三元需要表达式)必须计算为相同的类型 如果doSomething()是void类型,则肯定不是。如果doSomething()返回void,则不可能。参考 第一个表达式必须是

我一直试图以更具体的方式实现以下条件:

if (x > 1) 
 doSomething();
else {
 doSomethingElse();
}
要将其编码为:

(x > 1) ? doSomething() : doSomethingElse();

这根本不可能吗?

并非完全通用;三元中的参数(形式上三元需要表达式)必须计算为相同的类型


如果doSomething()是
void
类型,则肯定不是。

如果
doSomething()
返回
void
,则不可能。参考

第一个表达式必须是boolean或boolean类型,否则会发生编译时错误

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

事实上,根据表达式语句语法(§14.8),条件表达式不允许出现在可能出现无效方法调用的任何上下文中

最后,第二个和第三个操作数应计算为同一类型,JLS中也提到了如何进行此计算


p.S:为什么要对
true
false
进行
doSomething()

这取决于返回类型。如果您这样定义
void doSomething()
,那么这是不可能的。

您可以这样写:

i = (x > 1) ? doSomething() : doSomethingElse();
(x > 1) ? doSomething() : doSomethingElse();
但不是直接像这样:

i = (x > 1) ? doSomething() : doSomethingElse();
(x > 1) ? doSomething() : doSomethingElse();
因为:

14.8. 表达式语句 某些类型的表达式可用分号作为语句

ExpressionStatement: StatementExpression ; StatementExpression: Assignment PreIncrementExpression PreDecrementExpression PostIncrementExpression PostDecrementExpression MethodInvocation ClassInstanceCreationExpression 表达声明: 陈述表达; 语句表达式: 分配 预增量表达式 预分泌压 增加后表达 后减压力 方法调用 ClassInstanceCreationExpression
其中没有条件表达式。

三元用于内联if条件。它们需要一个返回值,因为你可以这样写:

System.out.println((x > 1) ? "True" : "False");

如果使用void,则不可能更改if/else中的函数名。对于首选的符号,也没有什么“更复杂”的了。这只是你喜欢的符号。JVM中的执行是相同的,如果它编译了的话,它不会,因为它不是有效的Java代码。不是真正的问题。
i=(x>1)?doSomething():doSomethingElse()
如果第二个和第三个操作数返回void,此操作是否有效?@如果他可以声明
void i,则ewidiot是(所以-->不)谢谢。这就解决了问题-只是将我的方法更改为private int doSomething(),private int doSomethingElse(),然后将表达式更改为int val=(x>1)?doSomething():doSomethingElse()@用户2365568什么?我说
I=…
只是为了澄清。我建议您保留原来的
if-else
,除非
val
有意义。我一直在考虑这个问题。val没有任何用处,在阅读代码时可能会更加困惑。