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)
我实际上是为了包括大括号,即使循环只包含一行,但由于你要使用清晰的代码,上面的代码段应该可以.
不,你不能这样做.
如果不喜欢这种风格,你可以更喜欢这种风格.
if(bool1 && bool2) voidFunc1(); else voidFunc2();
Run Code Online (Sandbox Code Playgroud)
在三元运算符中,操作数必须是非void表达式; 即他们必须产生一些实际价值.