検索

ホームページ  >  に質問  >  本文

Java 在集合初始化时赋值

List<String> list = new ArrayList<String>(){
            {
                add("hello");
                remove(0);
            }
        };
map = new HashMap<String, Object>(){
            {
                put("name","123");
            }
        };

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

大家讲道理大家讲道理2894日前361

全員に返信(3)返信します

  • PHPz

    PHPz2017-04-18 09:24:24

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

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

    例:

    リーリー

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

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

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

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

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

    返事
    0
  • 巴扎黑

    巴扎黑2017-04-18 09:24:24

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

    のコンストラクター呼び出しの間に実行されます。

    返事
    0
  • 黄舟

    黄舟2017-04-18 09:24:24

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

    返事
    0
  • キャンセル返事