Je l'exemple suivant:méthode Comprendre référence
public class App {
public static void main(String[] args) {
List<Car> list = Arrays.asList(new Car("green"), new Car("blue"), new Car("white"));
//Ex. 1
List<String> carColors1 = list.stream().map(CarUtils::getCarColor).collect(Collectors.toList());
//Ex. 2
List<String> carColors2 = list.stream().map(Car::getColor).collect(Collectors.toList());
}
static class CarUtils {
static String getCarColor(Car car) {
return car.getColor();
}
}
static class Car {
private String color;
public Car(String color) {
this.color = color;
}
public String getColor() {
return color;
}
}
}
Ex. 1 fonctionne depuis la méthode getCarColor
en CarUtils
classe a la même méthode de signature et le type de retour en tant que apply
méthode en Function
interface.
Mais pourquoi Ex. 2 œuvres? La méthode dans Car
classe a une signature de méthode différente de apply
et je m'attends à obtenir une erreur de temps de compilation ici.
Vous pouvez considérer la méthode 'getColor' comme ayant un paramètre implicite' this' qui est passé dans la méthode. Certaines langues rendent cela explicite. Donc vous avez essentiellement une fonction qui prend une instance de 'Car' et retourne un' String'. –