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

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

大家讲道理
大家讲道理

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

membalas semua(3)
PHPzhong

Sintaks ini dipanggil blok permulaan dinamik Java.

Ia ialah coretan kod yang dilampirkan dalam kurungan kerinting dalam kelas dan dipanggil secara automatik apabila kelas itu dibuat seketika.

Contohnya:

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

Kemudian apabila new Person() dipanggil, 123 akan dicetak.

Bagi kod dalam soalan anda, blok permulaan dinamik hanya diletakkan dalam kelas tanpa nama, jadi ia kelihatan agak pelik dan sukar difahami. Walau bagaimanapun, selepas semua, kelas tanpa nama juga adalah kelas, jadi mereka sah. Hasilnya ialah apabila kelas tanpa nama dijadikan instantiated, kod itu dilaksanakan dan beberapa elemen dimasukkan ke dalam koleksi, yang bersamaan dengan memulakan koleksi.

Mengenai versi Java yang mana ia disokong, saya tidak ingat dengan jelas, tetapi dianggarkan ia telah disokong untuk masa yang lama, dan ia harus disokong sejak Java 5.

Akhir sekali, memulakan koleksi dengan cara ini kelihatan seperti ilmu hitam.

Selain itu, anda juga boleh menyemak Blok permulaan statik untuk membandingkan perbezaannya.

巴扎黑

Pendakap kerinting di dalam

ialah blok permulaan, yang akan dilaksanakan antara panggilan pembina dalam

baharu
黄舟

Kurung kerinting bukan kelas dalaman tanpa nama, tetapi blok kod pembinaan, yang nampaknya dilaksanakan sebelum kaedah pembinaan (saya tidak ingat dengan jelasnya sebagai perkara yang sama dengan kaedah pembinaan).

Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan