Почему шаблоны getter/setter по умолчанию Intellij удаляют мой логический префикс имени переменной?

У меня есть сущность. Я определил переменную как логическую и создал методы Getter и Setter с помощью ярлыков Intellij Idea.

private Boolean isForLaboratory = false;

ддасд

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

После создания он сгенерировал это:

public Boolean getForLaboratory() {
    return isForLaboratory;
}

public void setForLaboratory(Boolean forLaboratory) {
    isForLaboratory = forLaboratory;
}

Я ожидал, что getIsForLaboratory и setIsForLaboratory. Это общее соглашение для Java? Почему Intellij удалил мои префиксы?


person Arif Acar    schedule 14.06.2016    source источник
comment
Boolean - это класс-оболочка, используйте примитивное логическое значение нижнего регистра. Рассмотрим isPlaying. Мы бы установили Playing и получили Playing или нет.   -  person Andrew Li    schedule 14.06.2016
comment
Это соглашение. IntelliJ предполагает, что базовое имя — ForLaboratory, а часть is присутствует только потому, что вы используете логическое значение. Попробуйте с String isForLaboratory и вы это увидите.   -  person Tim Biegeleisen    schedule 14.06.2016


Ответы (2)


Если вы откроете диалоговое окно для Generate Getter and Setter, вы увидите:

Getter template: IntelliJ Default
Setter template: IntelliJ Default

Нажмите кнопку справа от Getter Template, помеченную ..., и вы увидите, что код шаблона включает следующее:

#if ($StringUtil.startsWithIgnoreCase($name, 'is'))
  #set($name = $StringUtil.decapitalize($name))
#else
  is##

Другими словами, для полей, начинающихся с is, есть специальная обработка — и если вы хотите написать свой собственный шаблон, вы, конечно, можете это сделать :)

Что касается того, почему - существует стандарт javabeans для логических полей, где геттер для поля с именем (например) boolean enabled может быть isEnabled() вместо getEnabled(), и это, безусловно, связано с этим.

person vikingsteve    schedule 14.06.2016
comment
предложение: возможно, переименуйте вашу собственность в forLaboratory. Следовательно, геттер будет isForLaboratory() - для шаблона по умолчанию. - person vikingsteve; 25.10.2016

В IntelliJ версии 15+ вы должны использовать примитивное логическое значение, чтобы заставить IntelliJ генерировать функцию Get с префиксом «is».

по умолчанию Getter Template выглядит так:

#if ($field.boolean && $field.primitive)
  #if ($StringUtil.startsWithIgnoreCase($name, 'is'))
    #set($name = $StringUtil.decapitalize($name))
  #else
    is##
#end

Итак, правильный путь в IntelliJ 15.x и выше должен быть таким:

private boolean forLaboratory = false;

после автогенерации:

public boolean getForLaboratory() {
    return forLaboratory;
}

public void isForLaboratory(boolean forLaboratory) {
    this.forLaboratory = forLaboratory;
}
person Nicholas Lu    schedule 06.01.2018