小编典典

Java三元组,无需分配

java

有没有一种方法可以执行Java三元操作而无需进行赋值或伪造该伪造?

我喜欢做一堆if / then / elses时简洁的三元代码。

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

就像是:

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

我的函数是return类型的void,因此,如果有一种方法可以在赋值中伪造此函数以使其起作用,那么我可以…不过我想看看如何做到这一点:)


阅读 355

收藏
2020-09-08

共1个答案

小编典典

不,你不能那样做。该规范是这么说的

条件运算符具有三个操作数表达式。?:出现在第一和第二个表达式之间,而:出现在第二和第三个表达式之间。

第一个表达式的类型必须为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();

实际上 即使循环只包含一行,我还是要包含括号,但是由于要使用清晰的代码,因此上面的代码片段应该可以。

2020-09-08