Java 8 Verweis auf eine statische Methode vs. Instanz-Methode
sagen, ich habe den folgenden code
public class A {
int x;
public boolean is() {return x%2==0;}
public static boolean is (A a) {return !a.is();}
}
und in einer anderen Klasse...
List<A> a = ...
a.stream().filter(b->b.isCool());
a.stream().filter(A::is);
//would be equivalent if the static method is(A a) did not exist
die Frage ist, wie ich beziehen sich auf die Instanz-Methode-version mit den A::ist die Art der notation? Vielen Dank
- Du meinst, wie zum aufrufen von Instanz-Methode, wenn beide diese Methoden gibt es?
- Die compiler-Fehlermeldung lautet: "Verweis ist nicht eindeutig, beide Methode(A) in A und Methode() in A match". So klar der compiler nicht entscheiden kann, hier. Ich Wette, Ihre beste Wahl ist, ändern Sie die Schreibweise eines lambda-Ausdrucks zu machen, offensichtlich.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In deinem Beispiel sowohl die statische und nicht-statische Methode gelten für den Ziel-Typ von der filter-Methode. In diesem Fall können Sie nicht verwenden eine Methode die Referenz, weil die Ambiguität nicht aufgelöst werden können. Siehe §15.13.1 Compile-Time Deklaration einer Methode Referenz für details, insbesondere das folgende Zitat und die folgenden Beispiele:
In diesem Fall, Sie können einen lambda-Ausdruck anstelle einer Methode Referenz:
Der oben genannten Regel bezüglich der Suche nach statischen und nicht-statischen Methoden ist etwas besonderes, denn es spielt keine Rolle, welche Methode ist die bessere Passform. Auch wenn die statische Methode würde ein Objekt statt Eine, es ist immer noch unklar. Aus diesem Grund empfehle ich als Allgemeine Richtlinie: Wenn es mehrere Methoden mit dem gleichen Namen in einer Klasse (einschließlich der geerbten Methoden aus Basisklassen):
Können wir nicht verwenden keine statischen Methoden oder nicht-Globale Methoden durch die Verwendung von className::methodName notation.
Wenn Sie möchten, verwenden Sie die Methoden einer bestimmten Klasse müssen Sie eine Instanz der Klasse.
Dank.