有没有一种方法可以执行Java三元操作而无需进行赋值或伪造该伪造?
我喜欢做一堆if / then / elses时简洁的三元代码。
我希望能够基于布尔代数语句调用两个void函数之一。
就像是:
(bool1 && bool2) ? voidFunc1() : voidFunc2();
我的函数是return类型的void,因此,如果有一种方法可以在赋值中伪造此函数以使其起作用,那么我可以…不过我想看看如何做到这一点:)
void
不,你不能那样做。该规范是这么说的。
条件运算符具有三个操作数表达式。?:出现在第一和第二个表达式之间,而:出现在第二和第三个表达式之间。 第一个表达式的类型必须为boolean或Boolean,否则会发生编译时错误。 第二个操作数 表达式 或第三个操作数 表达式调用 void 方法 都是编译时错误 。
条件运算符具有三个操作数表达式。?:出现在第一和第二个表达式之间,而:出现在第二和第三个表达式之间。
第一个表达式的类型必须为boolean或Boolean,否则会发生编译时错误。
第二个操作数 表达式 或第三个操作数 表达式调用 void 方法 都是编译时错误 。
[编辑]
由于您询问反射问题,因此这里有一个解决方案。我不建议这样做。我发布它只是因为你问。
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); } }
在一天结束时,您必须问自己是否简洁可以提高代码的可读性(想想每个循环)。这些解决方案都不能提高代码的可读性恕我直言。如果我是你,我宁愿去。
if(condition) a(); else b();
实际上 , 即使循环只包含一行,我还是要包含括号,但是由于要使用清晰的代码,因此上面的代码片段应该可以。