Обновить

Комментарии 7

Нормальный синтаксис в итоге получился. Четкое соответствие Optional и по виду и по поведению и по сигнатурам. Просто и понятно в итоге.

А кто-то смотрел исходники? Какой механизм позволяет делать потоко безопасное присваивание? Всё тот же double check locking?

Как будто это единственный способ? CAS?

Не просто CAS, т.к нужна гарантия что саплаер будет вызван только раз, используют UNSAFE и локи

https://github.com/openjdk/jdk/commit/fbc4691bfa11f31601fd89d05da63e689343e214#diff-5246aa1dff8648587d2c613397b59379a97f1263a0a9f203f0b9b94c8ff96576R79

У них есть jep с новым ключевым словом lazy, но это на будущее. Они выпустили обзор на канале java по разбору этой фичи, там более подробно объясняют и показывают примеры использования https://youtu.be/uMypEIx8qY8?si=KQn3d-Ad8_Dwt5_r

Есть превью этого джепа? Пример синтаксиса?
Странно тащить ключевое слово ради этого, лучше бы делегаты как в Котлине завезли и можно было бы и lazy делешат сделать (https://youtrack.jetbrains.com/issue/KT-80669/Add-Lazy-implementation-using-JDKs-25-StableValues-API) и много чего еще красивого и DSL-подобного

Чем этот StableValue отличается от ломбокоской lazy? Если реализация - только еще один библиотечный класс, работающий на обычной java, то зачем все это?

Чем Jep-овская приблуда лучше этого кода?

    public static class PetClientController {
        @Getter(lazy = true)
        private final JavaMailSender javaMailSender = new JavaMailSenderImpl();

        public void adoptPet(SecurityProperties.User user, Object pet) {
            //...
            getJavaMailSender().send(new MimeMessage(...));
        }
    }
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации