No, non puoi farlo. Il spec says so.
L'operatore condizionale ha tre espressioni di operando. ? appare tra la prima e la seconda espressione, e: appare tra la seconda e la terza espressione di .
La prima espressione deve essere di tipo booleano o booleano oppure si verifica un errore in fase di compilazione .
È un errore di compilazione per il secondo o il terzo operando espressione sia un'invocazione di un metodo vuoto.
[EDIT]
Dal momento che hai chiesto di riflessione, ecco una soluzione. Non sto raccomandando questo. Sto pubblicandolo solo perché hai chiesto.
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);
}
}
Alla fine della giornata, hai avuto modo di chiedersi se sia succint migliora la leggibilità del vostro codice (si pensi per-ogni loop). Nessuna di queste soluzioni migliora la leggibilità del codice IMHO. Se fossi in te, preferirei andare con questo.
if(condition)
a();
else
b();
realtà sto per compreso tra parentesi graffe anche quando loop contengono solo una singola linea, ma dal momento che si sta andando dopo il codice croccante, il frammento di codice dovrebbe fare.
fonte
2013-04-12 17:09:52
@VenomFangs è possibile modificare le funzioni per restituire sempre un valore costante e assegnare questo valore di ritorno a una variabile fittizia. Ma non ne vale la pena - il codice sembrerà stupido, temo. Meglio farlo come sai già che dovresti fare. –