Intellij - kann durch Methodenreferenz ersetzt werden

10

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?

    
user 02.07.2017, 20:17
quelle

1 Antwort

14

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:

%Vor%     
davidxxx 02.07.2017, 20:19
quelle

Tags und Links