Каков правильный синтаксис для "is" переменных getter/setters в классе POJO?
Если класс содержит переменную с именем "blah", то стандартный синтаксис getter/setter, очевидно, getBlah() и setBlah(). Но если у меня есть класс POJO с переменной с именем isBlah, я бы использовал:
public type getIsBlah() {
return isBlah;
}
public setIsBlah(type isBlah) {
this.isBlah = isBlah;
}
Или это будет?
public type isBlah() {
return isBlah;
}
public setBlah(type blah) {
this.isBlah = blah;
}
Первое, по-видимому, более строго соответствует соглашениям POJO, но второй тип - это то, что генерирует IntelliJ, если я попрошу его создать класс getter/setters (и hey, IntelliJ еще не подвела меня:]). Итак, какой предпочтительный синтаксис?
Ответы
Ответ 1
Одной из причин использования свойств является отключение API от реализации. Другими словами, вы не должны чувствовать привязанность к тому, что называется вашей частной переменной. Это не должно указывать на именование, не пытаясь сохранить его для чтения для поддерживающих код.
Я бы сказал, что если "type" boolean
в этом случае, то вторая форма верна. Если это не boolean
, вы должны использовать getXXX
- но я, вероятно, не использовал бы getIsXXX
. Для меня "есть" имеет очень сильное соответствие с булевыми свойствами, и использование его в других контекстах не только нарушит соглашения JavaBeans (которые могут повлиять на другие инструменты), но и будет вводить в заблуждение IMO.
Ответ 2
Обратите внимание, что имя поля совершенно не соответствует спецификации JavaBean. Используются только имена геттера/сеттера.
Обычно имя получателя get<PropertyName>()
. Только для boolean
свойств is<PropertyName>()
разрешено в качестве альтернативы.
Обратите внимание, что в вашем примере имя свойства Bean - это "Бла", когда вы вызываете getter isBlah()
, и это "IsBlah", когда вы вызываете ваш getter getIsBlah()
.
Лично я обычно предпочитаю isBlah()
.
Ответ 3
Не сказал бы там сильного соглашения для POJO, но для JavaBeans второй (IntelliJ) пример является стандартом для логических атрибутов, все остальное использует getX
.
Ответ 4
Есть одна большая проблема с синтаксисом "есть", если вы используете JSTL, а JSTL EL не распознает их. Это довольно глупо, но дизайнеры JSTL EL не потрудились проверить свою логику соответствия javabeans.
Я часто нахожу себя в методах getIsBlah() в своих классах уровня представления, которые вызывают isBlah(), чтобы просто дать JSTL крючок. Это ужасно.
Ответ 5
Я бы тоже выбрал второй вариант. Первый, с getIsBlah()
кажется многословным и избыточным.
Ответ 6
Оба "get" и "is" на самом деле хороши, поскольку они технически все еще приемлемы в соответствии с соглашением JavaBeans. Я бы выбрал то, что звучит лучше или естественнее, в зависимости от того, на каком слове ваш "Бла" на самом деле.
Ответ 7
JSTL разрешает только isMyBool, если он является логическим, а не булевым или любым другим объектом, согласно спецификации bean. (примитивный объект vs).
Ответ 8
Это означает, что JAXB генерирует неверный код. Он создает свойства Boolean
, потому что они должны быть нулевыми, но все равно называет их getters isXXX()
, что нарушает спецификацию Bean.