Java 在集合初始化时赋值
大家讲道理
大家讲道理 2017-04-18 09:22:24
0
3
351
List<String> list = new ArrayList<String>(){
            {
                add("hello");
                remove(0);
            }
        };
map = new HashMap<String, Object>(){
            {
                put("name","123");
            }
        };

请问这个语法是来自 Java 几?他的原理又是什么?一个大括号我知道是匿名内部类,但是里面的大括号不知道是什么意思??

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

répondre à tous(3)
PHPzhong

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 :

class Person {
    {System.out.print(123);}
}

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).

Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal