List<String> list = new ArrayList<String>(){
{
add("hello");
remove(0);
}
};
map = new HashMap<String, Object>(){
{
put("name","123");
}
};
请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??
Cette syntaxe est appelée bloc d'initialisation dynamique de Java.
Il s'agit d'un extrait de code placé entre accolades au sein d'une classe et est automatiquement appelé lorsque la classe est instanciée.
Par exemple :
Ensuite, lorsque
new Person()
est appelé,123
sera imprimé.Quant au code de votre question, le bloc d'initialisation dynamique est juste placé dans une classe anonyme, donc cela semble un peu étrange et difficile à comprendre. Cependant, après tout, les cours anonymes sont aussi des cours, donc ils sont légaux. Le résultat est que lorsque la classe anonyme est instanciée, ce code est exécuté et plusieurs éléments sont placés dans la collection, ce qui équivaut à initialiser la collection.
Quant à la version de Java à partir de laquelle il a été pris en charge, je ne m'en souviens pas clairement, mais on estime qu'elle est prise en charge depuis longtemps, et elle devrait l'être depuis Java 5.
Enfin, initialiser une collection de cette façon ressemble à de la magie noire.
De plus, vous pouvez également consulter le Bloc d'initialisation statique pour comparer leurs différences.
Les accolades à l'intérieur de
sont des blocs d'initialisation, qui seront exécutés entre les appels du constructeur dans le nouveau
Les accolades ne sont pas des classes internes anonymes, mais des blocs de code de construction, qui semblent être exécutés avant la méthode de construction (je ne m'en souviens pas clairement, je considère cela comme la même chose que la méthode de construction).