いいえ、それはできません。仕様はそう言っています。
条件演算子には 3 つのオペランド式があります。? は 1 番目と 2 番目の式の間に表示され、: は 2 番目と 3 番目の式の間に表示されます。
最初の式は boolean または Boolean 型である必要があります。そうしないと、コンパイル時エラーが発生します。
2 番目または 3 番目のオペランド
式が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);
}
}
結局のところ、簡潔にすることでコードの可読性が向上するかどうかを自問する必要があります (for-each ループを考えてみてください)。これらのソリューションのいずれも、コードの可読性を改善するものではありません。私があなたなら、むしろこれで行きます。
if(condition)
a();
else
b();
実際には、ループに 1 行しか含まれていない場合でも中かっこを含めることに賛成ですが、鮮明なコードを求めているので、上記のスニペットで十分です。