J'ai récemment trouvé ce qui me semble être une nouvelle syntaxe pour initialiser statiquement une ArrayList:
new ArrayList() {{ add("first"); add("second"); }};
Qu'est-ce que la {{syntaxe sur initialiseur ArrayList vraiment faire
Ma question est, ce qui se passe réellement Là? Est-ce un raccourci pour définir un bloc statique (je pensais qu'il aurait besoin du mot-clé static
)? Ou juste un moyen de définir un constructeur par défaut? Autre chose? Quelle version de Java est-elle devenue valide?
Une explication plus un lien à la lecture plus serait grandement apprécié.
éditer: Ma classe de test pour montrer si le bloc d'initialisation s'exécute avant ou après que le constructeur soit en dessous. Les résultats montrent que les blocs de initialiseur exécutent avant que l'autre code constructeur:
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();
}
}
Sortie:
Running initalizer block
Running default constructor
Running subclass Initializer block
Running subclass constructor
Où avez-vous trouvé cette nouvelle syntaxe? Avez-vous un lien vers un article ou quelque chose à partager? – romacafe
BTW: pour ajouter à la confusion, vous pouvez avoir n'importe quel nombre de blocs statiques {} et {} n'importe où dans votre classe (en dehors des définitions de méthodes bien sûr) –
Related: http://stackoverflow.com/questions/924285/efficience- of-java-double-brace-initialisation C'est d'ailleurs pas nouveau. A déjà été en Java depuis des lustres. C'est en effet très rarement utilisé, et avec une bonne raison. – BalusC