Eu tenho o seguinte código:
Boolean bool = null;
try
{
if (bool)
{
//DoSomething
}
}
catch (Exception e)
{
System.out.println(e.getMessage());
}
Por que meu check-in na variável booleana "bool" resulta em uma exceção? Não deveria simplesmente passar da declaração if quando "vê" que não é verdade? Quando removo a instrução if ou verifico se NÃO é nulo, a exceção desaparece.
if (bool == Boolean.TRUE)
avalia false sem gerar uma exceção. Não tenho certeza se isso foi intencional no caso que acabei de encontrar.bool
sernull
OR seBoolean
fosse construído explicitamente (e não como referênciaBoolean.TRUE
). Então não é recomendado; ao contrário doif (Boolean.TRUE.equals(bool))
que funcionaria conforme o esperado, incluindo manipulação segura denull
valor.Respostas:
Quando você tem um
boolean
, pode ser umtrue
ou outrofalse
. No entanto, quando você tem umaBoolean
que pode serBoolean.TRUE
,Boolean.FALSE
ounull
como qualquer outro objeto.No seu caso particular, você
Boolean
énull
e aif
instrução aciona uma conversão implícita paraboolean
que produz oNullPointerException
. Você pode precisar:fonte
Boolean
pode haver qualquer número de instâncias verdadeiras, não apenasBoolean.TRUE
. Por exemplonew Boolean(true)
.if (myBoolean)
(ondemyBoolean
estáBoolean
) não gera um erro do compilador ou pelo menos um aviso. Este é um problema, com certeza.Se você não gosta de verificações nulas extras:
fonte
Use o Apache BooleanUtils .
(Se o desempenho máximo for a prioridade mais importante em seu projeto, procure uma das outras respostas para uma solução nativa que não exija a inclusão de uma biblioteca externa.)
Não reinvente a roda. Aproveite o que já foi construído e use
isTrue()
:Verifica se um
Boolean
valor é verdadeiro, manipulandonull
retornandofalse
.Se você não está limitado às bibliotecas que você "pode incluir", há várias funções auxiliares excelentes para todos os tipos de casos de uso, incluindo
Booleans
eStrings
. Eu sugiro que você examine as várias bibliotecas do Apache e veja o que elas já oferecem.fonte
toStringYesNo
desta biblioteca em todos os meus aplicativos.Boolean
tipos podem sernull
. Você precisa fazer umanull
verificação como a definiunull
.fonte
Ou com o poder do Java 8 opcional, você também pode fazer esse truque:
:)
fonte
Boolean é a classe de wrapper de objeto para o booleano primitivo. Essa classe, como qualquer classe, pode de fato ser nula. Por motivos de desempenho e memória, é sempre melhor usar o primitivo.
As classes de wrapper na API Java servem a dois propósitos principais:
http://en.wikipedia.org/wiki/Primitive_wrapper_class
fonte
como sua variável bool está apontando para um nulo, você sempre obterá uma NullPointerException, precisará inicializar a variável primeiro em algum lugar com um valor não nulo e modificá-la.
fonte
catch
bloco manipularia a NullPointerException. O problema aqui é que o OP tenta desmarcar uma referência nula em uma primitiva.null
e testá-la. Presumivelmente, o código real não seria tão simples ou todo oif
teste poderia ser removido.