2016-04-21 16 views

Odpowiedz

7

Co przeznaczony jest prawdopodobnie

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

Java nie można wywnioskować z nazwy metody sam, jakiego rodzaju można oczekiwać ?: wrócić.

nie jestem pewien, że to lepsze niż

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

Tego właśnie szukałem. Dzięki – redspider

5

Sposobem na to jest w następujący sposób:

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

Twój kod nie skompilować, ponieważ:

  1. trójoperandowy operator musi być użyty podczas przypisywania wartości. Tak nie jest w twoim kodzie.
  2. Odnośniki metod i wyrażenia lambda muszą być dopasowane do interfejsu funkcjonalnego, aby móc później wywołać jego jedną abstrakcyjną metodę. W twoim kodzie nie określasz żadnego funkcjonalnego interfejsu dla twoich odniesień do metod, więc nie ma późniejszego sposobu wywołania metody run().