Debido a su propiedad conmutativa , la única diferencia entre object == null
y null == object
(la versión de Yoda ) es de naturaleza cognitiva : cómo el lector lee y digiere el código. Sin embargo, no sé la respuesta definitiva, pero sé que personalmente prefiero comparar el objeto que estoy inspeccionando con otra cosa, en lugar de comparar otra cosa con el objeto que estoy inspeccionando , si eso tiene algún sentido. Comience con el tema, luego el valor con el que compararlo.
En algunos otros idiomas, este estilo de comparación es más útil.
Sin embargo, para protegerse contra un signo "=" perdido en general, creo que escribir null == object
es un acto equivocado de programación defensiva . La mejor forma de evitar este código en particular es garantizando el comportamiento con una prueba junit. Recuerde, el posible error de perder un "=" no depende de los argumentos de entrada del método; usted no depende del uso correcto de esta API por parte de otras personas, por lo que una prueba junit es perfecta para protegerse contra eso. De todos modos, querrá escribir pruebas junit para verificar el comportamiento; un "=" faltante naturalmente cae dentro del alcance.
null
referencias, el curso de acción predeterminado debería ser lanzar una NPE. Algunas bibliotecas agradables (como la biblioteca de Java JDK7) tienen un método parecido apublic static <T> T notNull(T obj) { if (obj == null) { throw new NullPointerException(); } else { return obj; } }
. También hay@NonNull
(@Nonnull
¿ o ?), Pero eso se "borra".null == object
se conoce como una condición de Yoda .