Java三元没有分配

Jam*_*vec 22 java ternary-operator ternary

有没有办法在没有做任务的情况下进行java三元操作或假冒伪造?

我喜欢在做一堆if/then/elses时简洁的三元代码看起来如何.

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

就像是:

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

我的函数是返回类型void,所以如果有一种方法可以在赋值中伪造它以使其工作,那么我对此没问题......我想看看如何做到这一点:)

Dee*_*ala 20

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

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

第一个表达式必须是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);
    }
}
Run Code Online (Sandbox Code Playgroud)

在一天结束时,你必须问自己是否提高了代码的可读性(想想 - 每个循环).这些解决方案都没有提高代码的可读性恕我直言.如果我是你,我宁愿一起去.

if(condition)
    a();
else
    b();
Run Code Online (Sandbox Code Playgroud)

我实际上是为了包括大括号,即使循环只包含一行,但由于你要使用清晰的代码,上面的代码段应该可以.

  • 用反射解决方案编辑我的答案.当然是出于学术目的:) (2认同)

Aja*_*y S 8

不,你不能这样做.

如果不喜欢这种风格,你可以更喜欢这种风格.

if(bool1 && bool2) voidFunc1(); else voidFunc2();
Run Code Online (Sandbox Code Playgroud)

在三元运算符中,操作数必须是非void表达式; 即他们必须产生一些实际价值.