Was ist die Bedeutung von :: im folgenden Code?Bedeutung von :: in Java-Syntax
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
Was ist die Bedeutung von :: im folgenden Code?Bedeutung von :: in Java-Syntax
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
Dies ist eine Methodenreferenz. Hinzugefügt in Java 8.
TreeSet::new
bezieht sich auf den Standardkonstruktor von TreeSet
.
Im Allgemeinen bezieht sich auf Verfahren A::B
B
in Klasse A
.
::
wird Methode Referenz genannt. Es ist im Grunde ein Verweis auf eine einzige Methode. es bezieht sich auf eine existierende Methode nach Namen.
Method reference using ::
ist ein Komfort Operator.
Methodenreferenz ist eine der Funktionen Java lambda expressions gehören. Verfahren Referenz kann mit dem üblichen Lambda-Ausdruck Syntaxformat ausgedrückt wird unter Verwendung von –>
Um es einfacher zu machen ::
Operator verwendet werden kann.
Beispiel:
public class MethodReferenceExample {
void close() {
System.out.println("Close.");
}
public static void main(String[] args) throws Exception {
MethodReferenceExample referenceObj = new MethodReferenceExample();
try (AutoCloseable ac = referenceObj::close) {
}
}
}
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
ruft/Schaffung eines 'neuen' TreeSet.
Ein ähnliches Beispiel eines Contstructor Referenz Code:
class Zoo {
private List animalList;
public Zoo(List animalList) {
this.animalList = animalList;
System.out.println("Zoo created.");
}
}
interface ZooFactory {
Zoo getZoo(List animals);
}
public class ConstructorReferenceExample {
public static void main(String[] args) {
//following commented line is lambda expression equivalent
//ZooFactory zooFactory = (List animalList)-> {return new Zoo(animalList);};
ZooFactory zooFactory = Zoo::new;
System.out.println("Ok");
Zoo zoo = zooFactory.getZoo(new ArrayList());
}
}
Person :: getName in diesem Zusammenhang ist eine Abkürzung für (Person p) -> p.getName()
Weitere Beispiele und eine ausführliche Erläuterungen in JLS section 15.13
+1, Was werden sie als nächstes denken? String Schalt vielleicht ... Schnittstellen mit Methoden ... – Bathsheba
@Bathsheba, ich meine Finger für Betreiber Überlastung überqueren. – ChiefTwoPencils
@ChiefTwoPencils Vor allem, wenn sie definieren auch ',' als Operator. –