Consumer (Java8 Lambda) an Timer übergeben

Hans_G

Mitglied
Ich kann einen javax.swing.Timer problemlos mit einem Lambda-Ausdruck anstelle des ActionListeners konstruieren:
Java:
Timer timer = new Timer(1000, (evt) -> doSomething() );

Warum geht es nicht auch mit einem Consumer?
Java:
Consumer<ActionEvent> consumer;
consumer = (evt) -> doSomething();
Timer timer = new Timer(1000, consumer);

Der Kompiler gibt für die letzte Zeile aus:
Code:
incompatible types: Consumer<ActionEvent> cannot be converted to ActionListener

Übesehe ich irgendwo etwas, oder ist das (noch) nicht implementiert?
 
Ahja das Ding mit den Lambda-Expressions. In Java wird das ein wenig anders gehandhabt, als in anderen Sprachen.

Du hast hier zwar die selbe Signatur (also (ActionEvent e) -> {}), aber nicht die gleiche Klasse. Nur weil beide Klassen die gleiche Signatur hätten, sind sie nicht gleich.
Java wandelt Lambda-Expressions in anonyme Klassen um (damit der Bytecode kompatibel bleibt). Nennen wir es einfach mal "Syntactic Sugar" und nicht wirklich ein Funktionsobjekt.

HIER vielleicht etwas nachzulesen.
 

Zurück
Oben