不,你不能那样做。该规范是这么说的。
条件运算符具有三个操作数表达式。?:出现在第一和第二个表达式之间,而:出现在第二和第三个表达式之间。
第一个表达式的类型必须为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();
实际上 , 即使循环只包含一行,我还是要包含括号,但是由于要使用清晰的代码,因此上面的代码片段应该可以。



