gpt4 book ai didi

无赋值的 Java 三元

转载 作者:IT老高 更新时间:2023-10-28 20:46:28 30 4
gpt4 key购买 nike

有没有办法在不进行赋值或伪造赋值的情况下进行 java 三元运算?

我喜欢在执行一堆 if/then/else 时的简洁三元代码。

我希望能够基于 boolean 代数语句调用两个 void 函数之一。

类似:

(bool1 && bool2) ? voidFunc1() : voidFunc2();

我的函数是返回类型 void,所以如果有办法在分配中伪造它以使其工作,那么我可以接受......我想看看怎么做呢:)

最佳答案

不,你不能这样做。 spec says so .

The conditional operator has three operand expressions. ? appears between the first and second expressions, and : appears between the second and third expressions.

The first expression must be of type boolean or Boolean, or a compile-time error occurs.

It is a compile-time error for either the second or the third operand expression to be an invocation of a void method.

[编辑]

既然您询问了反射,这里有一个解决方案。我不推荐这个。我发布它只是因为你问了。

public class MyCall
{

public void a(){System.out.println("a");}
public void b(){System.out.println("b");}

public static void main(String... args)
{
new MyCall().go();
}

public void go()
{
Class<? extends MyCall> class1 = this.getClass();
Method aMethod = class1.getMethod("b", null);
Method bMethod = class1.getMethod("a", null);
Object fake = false ? aMethod.invoke(this, null) : bMethod.invoke(this, null);
Object fake2 = true ? aMethod.invoke(this, null) : bMethod.invoke(this, null);
}
}

在一天结束时,您必须问自己,简洁是否可以提高代码的可读性(想想 for-each 循环)。这些解决方案都没有提高代码的可读性恕我直言。如果我是你,我宁愿选择这个。

if(condition)
a();
else
b();

我实际上是 for 包括大括号,即使循环只包含一行,但是由于您要追求清晰的代码,所以上面的代码片段应该可以。

关于无赋值的 Java 三元,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15977031/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com