В лямбда-выражении вы просто не можете ссылаться на нефинальные переменные.
Код: Выделить всё
// doesn't compile
@Test
void methodReferenceTest() {
String message = "123";
message = "1234";
Supplier messageLengthSupplier = () -> message.length();
System.out.print("Message length: ");
message = "12345";
System.out.print(messageLengthSupplier.get());
}
Код: Выделить всё
@Test
void methodReferenceTest() {
String message = "123";
message = "1234";
Supplier messageLengthSupplier = message::length;
System.out.print("Message length: ");
message = "12345";
System.out.print(messageLengthSupplier.get()); // prints 4
}
Есть вопросы, касающиеся проектных решений создателей Java (пример ), поэтому я считаю, что этот вопрос так же хорош (и соответствует теме), как и другие.
Меня не удовлетворяет вопрос «потому что ссылки на методы подобны дескрипторам методов» (поэтому я не ждите, что это будет отмечено как вопрос дубликат). Хорошо, почему они действуют как дескрипторы методов? Это просто перефразирует проблему, а не отвечает на вопрос.
Подробнее здесь: https://stackoverflow.com/questions/792 ... riables-wh
Мобильная версия