2016-04-21 11 views

risposta

7

quello che intendeva è probabile che sia

(doThis ? this::fooThis : (Runnable) (this::fooThat)).run(); 

Java non può dedurre dal nome del metodo da solo che tipo ci si aspetta il ?: per tornare.

io non sono sicuro che questo è meglio di

if (doThis) 
    fooThis(); 
else 
    fooThat(); 
+0

Questo era quello che stavo cercando. Grazie – redspider

5

Il modo per farlo è la seguente:

Runnable r = (doThis ? this::fooThis : this::fooThat); 
r.run(); 

Il codice non viene compilato perché:

  1. Il ternario l'operatore deve essere utilizzato quando si assegna un valore. Questo non è il caso nel tuo codice.
  2. I riferimenti di metodo e le espressioni lambda devono essere associati a un'interfaccia funzionale per chiamare in seguito il suo singolo metodo astratto. Nel tuo codice, non stai specificando alcuna interfaccia funzionale per i tuoi riferimenti al metodo, quindi non esiste un tipo in cui richiamare il metodo run() in seguito.
Problemi correlati