Pregunta

Soy un gran admirador de la caja automática en Java, ya que guarda mucho código de placa de caldera fea. Sin embargo, he encontrado que la unboxing automática es confusa en algunas circunstancias en las que el objeto número puede ser nulo. ¿Hay alguna forma de detectar dónde se produce automáticamente unboxing en una base de código con una advertencia de Javac? Se agradecería cualquier otra solución para detectar ocurrencias de unboxing (como FindBugs o advertencia de compilador específica de eclipse) ya que no puedo encontrar ninguno.

Para aclarar, no quiero que se generen advertencias en el boxeo, solo unboxing.

Aquí hay un ejemplo simple de algún código que puede causar confusos NullPointerExcepciones:

class Test {
    private Integer value;

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

Solución

Eclipse le permitirá las operaciones de boxeo y unboxing de color sintaxis (pero no una u otra). Los tengo configurados en rojo brillante: si sucede, significa que he sido descuidado en los parámetros y argumentos coincidentes.

Otros consejos

Sí. En eclipse:

Preferencias-> java-> compilador-> errores/advertencias-> problemas potenciales de programación-> conversiones de boxeo y unboxing

Lamentablemente no lo hay. Este es uno de los problemas con los números de unboxing automático. Puedes

  • Inicializarlo a un valor predeterminado, como private Integer value = 0
  • Verifique si hay un nulo return value != null ? value : 0

Personalmente prefiero el primer método. En general, creo que no tendrías demasiados casos en los que deberías tener un número nulo.

Además, ¿por qué está utilizando un entero grande para almacenar el valor? Si solo regresa un poco int, ¿por qué no almacenarlo de esa manera?

Dudo que este sea un caso de advertencia. Esta es una de las peculiaridades de Auto-Boxing.

Joshua Bloch aborda esto en su libro "Java efectivo". Básicamente, el compilador está tratando de hacer más por usted que lo que se espera. En otras palabras, este tipo de problema está más comúnmente relacionado con el uso y, como resultado, es difícil "detectar el error" como lo está, semánticamente, simplemente no allí.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top