Pergunta

Sou um grande fã de caixa automática em Java, pois economiza muito código de placa de caldeira feia. No entanto, achei que a unidade automática é confusa em algumas circunstâncias em que o objeto numérico pode ser nulo. Existe alguma maneira de detectar onde está ocorrendo uma caixa de unidade automática em uma base de código com um aviso de Javac? Qualquer outra solução para detectar apenas ocorrências de unboxing (como o FindBugs ou o aviso do compilador específico do eclipse) seria apreciado, pois não consigo encontrar nenhum.

Para esclarecer, não quero que nenhum aviso seja gerado no boxe - apenas unboxing.

Aqui está um exemplo simples de algum código que pode causar confusos nullpointerExceptions:

class Test {
    private Integer value;

    public int getValue() {
        return value;
    }
}
Foi útil?

Solução

O Eclipse permitirá que você operações de boxe e unboxing da cor-cor (mas não uma ou outra). Eu os tenho definido como vermelho brilhante: se o que acontecer, isso significa que eu fui desleixado em parâmetros e argumentos correspondentes.

Outras dicas

Sim. No eclipse:

Preferências-> java-> compilador-> erros/avisos-> Problemas de programação em potencial-> conversões de boxe e unboxing

Infelizmente não existe. Este é um dos problemas com os números de união automática. Você pode

  • Inicialize -o para um valor padrão, como private Integer value = 0
  • Verifique se há um nulo return value != null ? value : 0

Pessoalmente, prefiro o primeiro método. Em geral, eu acho que você não teria muitos casos em que deveria ter um número nulo.

Além disso, por que você está usando um grande número inteiro para armazenar o valor. Se você está retornando apenas um pouco, por que não armazená -lo dessa maneira?

Duvido que este seja um caso de aviso. Esta é uma das peculiaridades do caixa automático.

Joshua Bloch aborda isso em seu livro "Effective Java". Basicamente, o compilador está tentando fazer mais por você que o que é esperado. Em outras palavras, esse tipo de problema é mais comumente relacionado ao uso e, como resultado, é difícil "identificar o erro", como é o erro, semanticamente falando, simplesmente não está lá.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top