У меня есть следующий пример:Понимание метод ссылки
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 работает, так как метод getCarColor
в классе CarUtils
имеет тот же метод подписи и тип возврата, что и метод apply
в формате Function
.
Но почему Исх. 2 работы? Метод getColor
в Car
класс отличается от apply
сигнатурой метода, и я ожидаю получить ошибку времени компиляции здесь.
Вы можете придумать метод 'getColor' как имеющий неявный параметр' this', который передается в метод. Некоторые языки делают это явным. Таким образом, у вас в основном есть функция, которая принимает экземпляр 'Car' и возвращает' String'. –