Ich habe hier eine Klasse Handler
, die Event
s eines bestimmten Typs behandeln soll:
Wie Sie sehen, versucht es standardmäßig, den Typ von Event
zu erhalten, indem der erste Parametertyp der Methode handle()
zurückgegeben wird, wenn Sie getEventType()
ausführen (im Gegensatz zu Handler
) gibt es explizit zurück). Dies funktioniert korrekt mit dem folgenden JUnit-Test:
Intellij IDEA sagt mir, dass ich genericHandler
zu einem Lambda-Ausdruck vereinfachen kann, also tue ich das:
Der Test gibt jedoch den Namen Event
aus, nicht EmptyEvent
.
Meine Frage ist also: Gibt es eine Möglichkeit, den generischen Parametertyp eines Lambda-Ausdrucks explizit zu definieren?
Ich habe versucht, so etwas zu tun, aber es tut nichts (es ist auch ein Fehler)
%Vor% Sie treffen Annahmen über die Klasse des Objekts, für die das Lambda gilt, und ich glaube nicht, dass diese Annahmen gültig sind. Es genügt, dass das Lambda die Methode handle()
von Handler
überschreibt und zur Laufzeit eine handle()
-Methode, die Event
benötigt, ausreicht, um die handle()
von Handler
zu überschreiben, was nach dem Löschen% co_de einnimmt %. Nirgendwo ist garantiert, dass das Lambda eine Event
-Methode haben muss, von der man annehmen kann, dass sie handle()
benötigt.
Die folgenden Variablen können alle auf dasselbe Objekt zeigen!
%Vor%Sie können nicht wirklich über den genauen Laufzeittyp eines Lambda-Ausdrucks nachdenken; Die einzige Garantie ist, dass der Lambda-Body zur Laufzeit arbeitet.
Der Rumpf der [runtime] -Methode hat den Effekt zur Auswertung des Lambda-Körpers