Size: a a a

2021 March 10

ДМ

Дмитрий Майсак... in pro.jvm
Вопрос один,  помогите разобраться, почему же в лямбах нужно использовать  final  переменные и как это связано с пямятью stack area.
источник

T

Tim Ami in pro.jvm
можешь массив использовать
источник

T

Tim Ami in pro.jvm
связано с кешированием
источник

AM

Aleksander Melnichni... in pro.jvm
Vyacheslav @bvn13
Скомпилленный класс на месте.
Смотри как идея запускает там есть команда java classname -cp директория с доп класспасом
источник

ДМ

Дмитрий Майсак... in pro.jvm
да тут больше вопрос почему, а то никогда не задумывался
источник

ДМ

Дмитрий Майсак... in pro.jvm
было по принципу нельзя да нельзя)) а вот почему нельзя теперь надо понять
источник

AM

Aleksander Melnichni... in pro.jvm
Дмитрий Майсак
да тут больше вопрос почему, а то никогда не задумывался
Почему - потому что есть два варианта реализации: вместе с лямбдой копировать данные - а можно не копировать, иметь ссылку на них - но тогда не позволять пользователю менять их из вне. Во втором случае переменные должны быть final или effectively final
источник

V@

Vyacheslav @bvn13 in pro.jvm
Дмитрий Майсак
да тут больше вопрос почему, а то никогда не задумывался
функциональные интерфейсы могут быть запущены в отдельном треде - где-то я читал, что из-за этого - нельзя предугадать, как будет запущено
источник

ДМ

Дмитрий Майсак... in pro.jvm
Aleksander Melnichnikov
Почему - потому что есть два варианта реализации: вместе с лямбдой копировать данные - а можно не копировать, иметь ссылку на них - но тогда не позволять пользователю менять их из вне. Во втором случае переменные должны быть final или effectively final
этот вариант я видел, но вот как обяснение этого связано со стек памятью
источник

AM

Aleksander Melnichni... in pro.jvm
Дмитрий Майсак
этот вариант я видел, но вот как обяснение этого связано со стек памятью
К сожалению, я не знаю как технически это реализовано в джаве. Не могу уточнить.
источник

VP

Vladimir Petrakovich in pro.jvm
Дмитрий Майсак
Вопрос один,  помогите разобраться, почему же в лямбах нужно использовать  final  переменные и как это связано с пямятью stack area.
Потому что поведение для изменяемых переменных не определено 🤷‍♂
А со стеком это связано так, что лямбда их не со стека берёт, а захватывает текущие значения при создании.
источник

РХ

Руфат Хафизов... in pro.jvm
Aleksander Melnichnikov
Если не справитесь, я чуть позже сегодня гляну тоже
но скорее всего мне нужна будет ваша помощь
источник

AM

Aleksander Melnichni... in pro.jvm
Руфат Хафизов
но скорее всего мне нужна будет ваша помощь
Хорошо. Подскажите точнее какое поле из jwt убираете?
источник

ДМ

Дмитрий Майсак... in pro.jvm
Vladimir Petrakovich
Потому что поведение для изменяемых переменных не определено 🤷‍♂
А со стеком это связано так, что лямбда их не со стека берёт, а захватывает текущие значения при создании.
а можешь по подробнее описать как это работает или скинуть ссылку  на что то где описывают?
источник

РХ

Руфат Хафизов... in pro.jvm
Aleksander Melnichnikov
Хорошо. Подскажите точнее какое поле из jwt убираете?
мне по идее все данные о пользаке нужно оттуда убрать.
источник

T

Tima in pro.jvm
Aleksander Melnichnikov
сделай так же
Такая же ошибка
источник

РХ

Руфат Хафизов... in pro.jvm
т.е. логин/юзернейм/емайл и т.д.
источник

VP

Vladimir Petrakovich in pro.jvm
Дмитрий Майсак
а можешь по подробнее описать как это работает или скинуть ссылку  на что то где описывают?
В JLS наверняка описано
источник

VP

Vladimir Petrakovich in pro.jvm
А вот ответ на вопрос "почему так сделано" скорее всего надо искать глубже
источник

AM

Aleksander Melnichni... in pro.jvm
Tima
Такая же ошибка
Проверьте что у вас новый файл попал в артефакт. те вы сделали clean ресурсов
источник