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

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

大家讲道理
大家讲道理

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

全員に返信(3)
PHPzhong

この構文は、Java の 動的初期化ブロック と呼ばれます。

これはクラス内の中括弧で囲まれたコード スニペットであり、クラスがインスタンス化されるときに自動的に呼び出されます。

例:

リーリー

その後、new Person() が呼び出されると、123 が出力されます。

ご質問のコードに関しては、動的初期化ブロックが匿名クラスに配置されているだけなので、少し奇妙で理解しにくいように見えます。しかし、結局のところ、匿名クラスもクラスであるため、合法です。その結果、匿名クラスがインスタンス化されると、そのコードが実行され、いくつかの要素がコレクションに追加されます。これは、コレクションを初期化することと同じです。

Java のどのバージョンからサポートされていたかははっきりとは覚えていませんが、かなり前からサポートされていると推測され、Java 5 からサポートされているはずです。

最後に、この方法でコレクションを初期化するのは黒魔術のように見えます。

さらに、静的初期化ブロック をチェックして、その違いを比較することもできます。

いいねを押す +0
巴扎黑

内の波括弧は初期化ブロックで、新しい

のコンストラクター呼び出しの間に実行されます。
いいねを押す +0
黄舟

中括弧は匿名内部クラスではなく、構築メソッドの前に実行される構築コードブロックであると思われます(明確に覚えていません)。

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート