2012-06-20 16 views
7

Quiero volver desde el bloque estático.Cómo devolver desde un bloque de inicialización estático en java

Parece que la declaración de devolución y corte no funciona. ¿Hay alguna alternativa?

Sé que la solución incorrecta podría ser crear una bandera y marcar la bandera para continuar o no.

Entiendo que los bloques de inicialización no están pensados ​​para realizar cálculos, sino solo para la inicialización básica durante la carga de la clase.

+3

indique su código fuente –

+0

No puedo entender el problema. Explíquelo con claridad o proporcione su código para una fácil comprensión. –

+1

@Kalai Supongo que quiere decir que 'return' no se puede usar dentro de un bloque de inicialización. JLS 14.17: "[...] Es un error en tiempo de compilación si una declaración de devolución está contenida en un inicializador de instancia o en un inicializador [...] estático" –

Respuesta

7

En lugar de usar return simplemente ajuste su código condicional en if.

18

Delegado del código a un método estático privado:

static { 
    initialize(); 
} 

private static void initialize() { 
    foo(); 
    if (someCondition) { 
     return; 
    } 
    bar(); 
} 
+0

manera más limpia de escribir bloques de inicialización. –

0

No se puede volver de un bloque inicializador estático. No hay ningún lugar al que regresar. Pero no debería ser necesario. Debería poder reestructurar su código para que sea "entrada única, salida única".

+0

Tendría que estar de acuerdo con esta afirmación, también proporcionaría un código mucho más limpio (y más fácil de leer). – Anders

0

No puede regresar del bloque estático pero es mejor utilizar alguna otra función que realice su lógica y regrese al bloque.

1

Los inicializadores estáticos no son complicados, por lo que probablemente sea una mala idea (incluso si no compra SESE).

La forma mínima de lograr un rendimiento es utilizar un corte rotulado.

static { 
    init: { 
     ... 
      break init; 
    } 
} 

Ellos son muy raros, por lo general aparecen en for bucles anidados. La novedad puede alertar al lector de que está ocurriendo algo un poco peligroso.

Cuestiones relacionadas