2013-06-13 3 views
4

Допустим, у меня есть класс foo, в котором у меня есть Boolean (не boolean) переменной bar:Boolean (Object) добытчиками в Java

class foo { 
    Boolean bar; 

    Boolean isBar(){ 
     return bar; 
    } 

    boolean isBar(){ 
     return bar.booleanValue(); 
    } 
} 

Какой из перечисленных выше методов является правильный путь в Java.

Я знаю, что оба будут работать, но я хочу знать, что такое соглашение о кодировании в Java по этому вопросу?

+8

Ну вы * хотите * для возврата 'Boolean' или' boolean'? Если вы возвращаете 'boolean', как бы вы обрабатывали' bar' '' null? –

ответ

10

если вы будете actualy использовать булеву типа ваш метод должен быть

Boolean getBar(){ 
    return bar; 
} 

в противном случае ваше поле должно быть примитивный логический тип.

+3

Это должен быть комментарий. – Maroun

+0

Это хороший ответ. Зачем он это замечает? –

+2

Он не просит об условных обозначениях. Он спрашивает 'bar.booleanValue();' vs 'return bar;'. Это хорошая нота, но она не отвечает на вопрос. (Или я неправильно понял вопрос :)) – Maroun

1

Если только bar может быть null, и это то, что вы хотите модель в своем классе, я хотел бы использовать:

class foo { 
    boolean bar; 

    boolean isBar(){ 
     return bar; 
    } 
} 

Это проще, быстрее и не может иметь NullPointerException с.

Если, однако, null является допустимым значением, и вы хотите, чтобы модель была такой, вы должны использовать Boolean/Boolean.

Обратите внимание, что ваш код:

Boolean bar; 

boolean isBar() { 
    return bar.booleanValue(); 
} 

Или даже вариант Autoboxing:

Boolean bar; 

boolean isBar() { 
    return bar; 
} 

... может бросить NullPointerException с. Особенно последний из них очень запутан.

+1

Хороший вопрос - в чем причина того, что в качестве переменной экземпляра есть 'Boolean'? – selig

+0

он может быть пустым –

+2

Логический объект как «хороший» способ иметь 3 состояния, например «Вкл», «Выкл.» И «Не имеет значения» – Adrian

2

a boolean является примитивным, это может быть true или false. Boolean - обертка объекта для boolean. Boolean может быть true, false и null. Если вам это не нужно null, используйте boolean, так как это дешевле для памяти.

Boolean имеет множество вспомогательных методов, например, вы можете иметь логическое значение из строки с помощью Boolean.valueOf(theString);, который может быть «ложным» или «истина», вместо того, чтобы делать

if("true".equals(theString)) 
    primitiveBoolean = true; 
+1

+1 для краткости :) –