2014-02-18 1 views
4

Похоже, все говорят, что право геттер для:булево (Boolean) - геттер против получить

  • примитивного булево -> геттер является
  • объект Boolean -> геттер получить

Пример:

public class Test { 

    private boolean primitive; 
    private Boolean object; 

    public boolean isPrimitive() { 
     return primitive; 
    } 
    public Boolean getObject() { 
     return object; 
    } 
    //.. 
} 

Вопрос:

Есть ли спецификация или документ, в которых указано, что это правильно, и это способ указать геттеры для булевых значений? Или это только общее предположение?

Я спрашиваю becouse, например wsimport создает геттер является для булева объекта. Это ошибка инструмента, или это разрешено и правильно?

С другой стороны, некоторые фреймворки не работают должным образом с такими геттерами. Например, JSF (EL) или Dozer.

+9

Самое грубое имя для ссылочной переменной - «объект» –

+1

'is' на мой взгляд работает только если логическое имя является прилагательным, а не существительным. –

+0

@CeilingGecko Многие библиотеки не согласятся. Обычно при работе с абстрактными/супер-типами ... Gson, например ... 'JsonElement.isJsonArray()' –

ответ

7

Метод получения по полю boolean myField: getMyfield() или isMyField() (это зависит от пользователя). Я лично использую второй формат, как это делают многие инструменты генерации исходного кода.

Этот формат является стандартом, он определен в спецификации JavaBeans. См раздел 8.3.2 этой документации: http://download.oracle.com/otndocs/jcp/7224-javabeans-1.01-fr-spec-oth-JSpec/

Цитата из документации:

In addition, for boolean properties, we allow a getter method to match the pattern: 

    public boolean is<PropertyName>(); 

документация не говорит о примитивных обертках, как Boolean класса.

+1

... не говоря уже о том, что спецификация даже не упоминает логические атрибуты;) –

2
public boolean isPrimitive() { 
    return primitive;  // "is" used because the value can be either true or false. Its like asking isTrue?? 
} 
public Boolean getObject() { 
    return object;   // "get" is used because the value returned can be either true, false or null. So, the third state 'null' makes you wonder if 'is' should be used or 'get'. get is more appropriate as Boolean can also have null. 

Но, честно говоря, его левый разработчик. Нет ничего «неправильного» в использовании getBoolean по логическому значению («is» имеет больше смысла .. thats it.).