Co oznacza :: w poniższym kodzie?Znaczenie :: w składni Java
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
Co oznacza :: w poniższym kodzie?Znaczenie :: w składni Java
Set<String> set = people.stream()
.map(Person::getName)
.collect(Collectors.toCollection(TreeSet::new));
To odwołanie do metody. Dodano w języku Java 8.
TreeSet::new
odnosi się do domyślnego konstruktora z TreeSet
.
Ogólnie rzecz biorąc A::B
odnosi się do metody B
w klasie A
.
::
nazywane jest odniesieniem do metody. Jest to w zasadzie odniesienie do jednej metody. tj. odnosi się do istniejącej metody po nazwie.
Method reference using ::
jest operatorem wygoda.
Odniesienie do metody jest jedną z funkcji należących do Java lambda expressions. Odniesienie do metody można wyrazić przy użyciu zwykłego formatu składni ekspresji lambda, używając –>
. Aby uczynić go prostszym, można użyć operatora.
Przykład:
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));
dzwoni/stworzenie 'nowego' TreeSet.
Podobny przykład Contstructor referencyjny to:
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 w tym kontekście jest skrótem (Person p) -> p.getName()
Zobacz więcej przykładów oraz szczegółowy wyjaśnienia w JLS section 15.13
+1 o czym będą myśleć dalej? Przełączanie sznurów być może ... Interfejsy z metodami ... – Bathsheba
@ Batszaba, przeciskam palce, by przeciążać operatora. – ChiefTwoPencils
@ChiefTwoPencils Zwłaszcza jeśli definiują one również ',' jako operator. –