Signification de: dans la syntaxe Java [dupliquer]
Cette question a déjà une réponse ici:
- :: (deux points) opérateur en Java 8 14 réponses
Quelle est la signification de :: dans le code suivant?
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
3 answers
C'est la référence de la méthode. Ajouté en Java 8.
TreeSet::new
désigne le constructeur par défaut de TreeSet
.
En général A::B
fait référence à la méthode B
dans la classe A
.
::
est appelé Référence de méthode. C'est essentiellement une référence à une seule méthode. il s'agit d'une méthode existante par son nom.
Method reference using ::
est un commodité opérateur.
La référence de méthode est l'une des fonctionnalités appartenant àJava lambda expressions . La référence de méthode peut être exprimée en utilisant le format de syntaxe d'expression lambda habituel en utilisant –>
Afin de le rendre plus simple ::
l'opérateur peut être utilisé.
Exemple:
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) {
}
}
}
Donc, Dans votre exemple:
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
Appelle/crée un "nouvel" treeset.
Un exemple similaire d'une référence Contstructor est:
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 dans ce contexte est un raccourci pour (Person p) -> p.getName()
Voir plus d'exemples et d'explications détaillées dans JLS article 15.13