Immer wenn ich Lambda-Ausdrücke wie folgt verwende:
%Vor%IntelliJ schlägt vor: "Kann durch Methodenreferenz ersetzt werden ...". Und wenn ich es dann versuche:
%Vor%Ich bekomme die folgende Aussage: "Nicht-statische Methode kann nicht aus einem statischen Kontext referenziert werden".
Warum Idee schlägt mir vor, ich sollte Methodenreferenz verwenden, wenn es nicht korrekt ist?
Während Sie schreiben:
%Vor%Der Compiler erwartet eine dieser beiden Möglichkeiten:
ruft eine Foo.makeSomething()
Instanzmethode für den ersten Parameter des Lambda auf, der als Foo
definiert werden muss.
ruft eine Foo.makeSomething()
statische Methode auf.
Die erste Möglichkeit wird vom Compiler eliminiert, da der erste Parameter des Lambdas deklariert ist obj
ist kein Foo
.
Und entsprechend Ihrer Fehlermeldung ist Foo.makeSomething()
eine Instanzmethode:
Nicht-statische Methode kann nicht aus einem statischen Kontext "
" referenziert werden
Also ist die zweite Möglichkeit (das Aufrufen einer Foo.makeSomething()
statischen Methode) nicht zulässig, da makeSomething()
nicht statisch ist.
Tatsächlich wollen Sie die Instanzmethode makeSomething()
auf eine Variable anwenden, die nicht zu den Lambda-Parametern gehört.
Sie können es tun, aber Sie müssen eine andere Syntax verwenden.
Anstatt Foo::
anzugeben, verwenden Sie foo::
.
Auf diese Weise wird die Instanzmethode makeSomething()
auf die Variable foo
angewendet:
Tags und Links java intellij-idea