Лямбды и ссылки на методы используют разные подходы к неконечным переменным. Почему?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Лямбды и ссылки на методы используют разные подходы к неконечным переменным. Почему?

Сообщение Anonymous »

Я этого не понимаю.
В лямбда-выражении вы просто не можете ссылаться на нефинальные переменные.

Код: Выделить всё

// 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 не использовали один подход как для лямбда-выражений, так и для ссылок на методы?
Есть вопросы, касающиеся проектных решений создателей Java (пример) , поэтому я считаю, что этот вопрос так же хорош (и соответствует теме), как и другие.
Меня не удовлетворяет фраза «потому что ссылки на методы подобны дескрипторам методов» (поэтому я не не ожидаю, что это будет отмечено как вопрос дубликат). Хорошо, почему они действуют как дескрипторы методов? Это просто перефразирует проблему, а не отвечает на вопрос.

Подробнее здесь: https://stackoverflow.com/questions/792 ... riables-wh
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»