2012-06-28 6 views
8

Acabo de empezar a usar el nuevo Eclipse 4.2 (Juno) Análisis nulo.¿Hay alguna manera de marcar (por ejemplo, anotar) un método Java como nunca volver?

El código como este:

x = foo(); 
if (x == null) 
    fail("x is null"); 
return x.bar(); 

estoy recibiendo advertencias de que X puede ser nulo. Pero no puede ser, porque el fracaso siempre arroja y, por lo tanto, nunca regresa. (Con un mejor análisis entre procedimientos podría presumiblemente determinar esto automáticamente, pero actualmente no parece).

Obviamente, hay formas de reescribir el código para evitar la advertencia, pero lo que me gustaría es una forma de indicar (por ejemplo, una anotación) que nunca falla el retorno.

También traté de suprimir la advertencia con @SuppressWarnings ("nulo") pero eso no funcionó.

Una forma de deshacerse de la advertencia es añadir: assert x != null; (suponiendo que haya encendido el ajuste para incluir afirma en el análisis nulo)

En GCC C++ que puedo hacer: void fn __attribute__ ((noreturn))

+0

No estoy al tanto de esta situación. ¿Necesita esto o es más una consulta académica? – BlackVegetable

+1

No es crítico ya que puedo solucionarlo fácilmente, pero es a partir del código de producción real. –

Respuesta

11

Una semi -tradicional manera de hacer esto es como sigue:

public RuntimeException fail(String message) { 
    throw new RuntimeException(message); 
} 

para que pueda escribir throw fail("x is null"). Por supuesto, fail siempre terminará haciendo el lanzamiento, no el throw, pero es suficiente para tranquilizar al compilador que esa línea siempre arrojará.

+1

Solución interesante. ¿Alguien recomienda este patrón para ser utilizado? – BlackVegetable

+4

Como referencia, es el patrón utilizado por Guava en la clase de utilidad 'Throwables'. –

+0

¿Por qué es esto mejor que '' RuntimeException pública falla (mensaje de cadena) { return new RuntimeException (message); } '? Solo estoy haciendo una pregunta, no expreso una preferencia. – emory

Cuestiones relacionadas