recientemente he encontrado lo que me parece ser una nueva sintaxis para inicializar estáticamente un ArrayList:
new ArrayList() {{ add("first"); add("second"); }};
¿Qué significa la {{sintaxis de inicializador ArrayList realmente hacer
Mi pregunta es, lo que realmente está sucediendo ¿ahí? ¿Es ese un atajo para definir un bloque estático (pensé que necesitaría la palabra clave static
)? ¿O solo una forma de definir un constructor predeterminado? ¿Algo más? ¿Qué versión de Java hizo esto válido?
Una explicación más un enlace para seguir leyendo sería muy apreciada.
editar: Mi clase de prueba para mostrar si el bloque de inicializador se ejecuta antes o después de que el constructor esté debajo. Los resultados muestran que los bloques de inicializador ejecutan antes que el otro código de constructor:
import org.junit.Test;
public class InitializerBlockTest {
class InitializerTest {
{
System.out.println("Running initalizer block");
}
public InitializerTest() {
System.out.println("Running default constructor");
}
}
class SubClass extends InitializerTest {
{
System.out.println("Running subclass Initializer block");
}
public SubClass() {
System.out.println("Running subclass constructor");
}
}
@Test
public void testIt() {
new SubClass();
}
}
Salida:
Running initalizer block
Running default constructor
Running subclass Initializer block
Running subclass constructor
¿Dónde encontraste esta nueva sintaxis? ¿Tiene un enlace a un artículo o algo para compartir? – romacafe
BTW: para aumentar la confusión, puede tener cualquier cantidad de bloques estáticos {} y {} en cualquier parte de su clase (fuera de las definiciones de métodos, por supuesto) –
Relacionados: http://stackoverflow.com/questions/924285/efficiency- of-java-double-brace-initialization Por cierto, no es nuevo. Ya ha estado en Java por años. De hecho, es muy poco utilizado, y con una buena razón. – BalusC