Хобрук: Ваш путь к мастерству в программировании

Как создать класс @Immutable Groovy с резервными значениями по умолчанию для полей?

В настоящее время мы используем конструктор на основе карты в классе @Immutable и передаем все значения полей во время создания экземпляра. Я хотел бы установить разумные значения по умолчанию для полей на случай, если пользователь не предоставит им какое-либо значение во время создания экземпляра?

Есть ли отличный способ (простой способ) сделать это?

01.08.2016

Ответы:


1

Вы можете заполнить атрибуты в объявлении класса:

@groovy.transform.Immutable
class Person {
    String name = 'john'
}

p = new Person(name: 'percy')
assert p.name == 'percy'

p2 = new Person()
assert p2.name == 'john'

Обновление: Groovy дает сбой, если после создания объекта используются какие-либо установщики.

try {
    p2.name = 'echo'
    assert p2.name == 'echo'
    assert false
} catch(e) {
    assert true
}

Обновление 2: А, groovyConsole на помощь. @Immutable задает поле name в конструкторе, таким образом, поле является, по сути, окончательным.

введите здесь описание изображения

01.08.2016
  • Ах, по какой-то причине у меня сложилось впечатление, что эти поля были final (плохо). Спасибо. 01.08.2016
  • Поля являются окончательными. В примере нет ничего, чтобы предположить, что это не так. Документ: docs.groovy-lang.org/latest/ html/gapi/groovy/transform/ 02.08.2016
  • @MichaelEaster В приведенном выше примере полю name присваивается значение дважды: один раз во время объявления и другой раз в неявном конструкторе на основе карты. Это не разрешено для переменных final (по крайней мере, в Java, я новичок в Groovy). Пожалуйста, поправьте меня, если я что-то упустил. 03.08.2016
  • @MichaelEaster Действительно. Добавлен вывод groovyConsole. 04.08.2016
  • Благодарю за разъяснение. Groovy допускает многократное присвоение final переменных до завершения конструктора. Java не позволяет этого, поэтому я был сбит с толку. 04.08.2016
  • Новые материалы

    Аргументы прогрессивного улучшения почти всегда упускают суть
    В наши дни в кругах веб-разработчиков много болтают о Progressive Enhancement — PE, но на самом деле почти все аргументы с обеих сторон упускают самую фундаментальную причину, по которой PE..

    Введение в Джанго Фреймворк
    Схема «работать умно, а не усердно» В этой и последующих статьях я познакомлю вас с тем, что такое фреймворк Django и как создать свое первое приложение с помощью простых и понятных шагов, а..

    Настольный ПК как «одно кольцо, чтобы править всеми» домашних компьютеров
    Вид после 9 месяцев использования С настольных компьютеров все началось, но в какой-то момент они стали «серверами», и мы все перешли на ноутбуки. В прошлом году я столкнулся с идеей настольных..

    Расширенные методы безопасности для VueJS: реализация аутентификации без пароля
    Руководство, которое поможет вам создавать безопасные приложения в долгосрочной перспективе Безопасность приложений часто упускается из виду в процессе разработки, потому что основная..

    стройный-i18следующий
    Представляем стройную оболочку для i18next. Эта библиотека, основанная на i18next, заключает экземпляр i18next в хранилище svelte и отслеживает события i18next, такие как languageChanged,..

    Обзор 20 основных и современных методов работы с массивами в JavaScript
    Вы знаете их всех? В этом коротком посте я покажу сводку методов, доступных в JavaScript для работы с массивами. Я надеюсь, что вы найдете это полезным! В конце поста вы найдете ссылку на..

    Да, но я чувствую необходимость указать, что это или не единственные два.
    Да, но я чувствую необходимость указать, что это или не единственные два. Обучение с подкреплением (в качестве примера) также является важным.