【问题标题】:Trouble in understanding this syntax [duplicate]难以理解这种语法[重复]
【发布时间】:2012-08-01 11:30:26
【问题描述】:

我在阅读其他一些代码时遇到了这种语法

Map<String, String> map = new HashMap<String, String>() {
    { 
         put("a", "b");
    }
};

我知道如何使用anonymous inner class,但这似乎有些不同。有人可以解释一下上面的工作原理以及它与Map&lt;String, String&gt; map = new HashMap&lt;String, String&gt;(); map.put("a", "b"); 的不同之处吗?

【问题讨论】:

  • Is 有时也称为双括号初始化。
  • 感谢 assylias,发帖前尝试搜索,但找不到。
  • 我在“[java] +double +brace”上进行了搜索-除非您知道替代名称,否则很难找到! ;-)
  • 只搜索“双大括号java”;带我到相关页面。

标签: java


【解决方案1】:

您基本上是在创建一个匿名类实例并指定一个instance initializer。把它想象成一个普通的类,例如:

class Person {

  String age, name;

  List<String> hobbies;

  {
    hobbies = new ArrayList<String>();
  }

  public Person(String name, String age) {
    this.name = name;
    this.age = age;
  } 

}

您认为以上内容在做什么?您的匿名班级正在做类似的事情。 :)

【讨论】:

  • 正确,只要new Person(...) 被调用,甚至兴趣爱好都会随着姓名和年龄一起被初始化。谢谢!
  • 是的,你没看错。还要确保您浏览了原始帖子评论中提到的主题。
【解决方案2】:

正如 Sanjay T. Sharma 清楚地解释的那样,它正在创建匿名类实例。事实上,它正在扩展java.util.HashMap。考虑以下代码:

package com.test;

import java.util.HashMap;
import java.util.Map;

public class Demo {
    public static void main(String[] args) {
        Map<String, String> mapSimple = new HashMap<String, String>();
        System.out.println("Simple java.util.HashMap:");
        System.out.println("\t" + mapSimple.getClass());

        Map<String, String> map = new HashMap<String, String>() {
            {
                put("a", "b");
            }
        };

        System.out.println("Anonymous class based on java.util.HashMap:");
        System.out.println("\t" + map.getClass());
        System.out.println("\t" + map.getClass().getSuperclass());
    }
}

它产生以下输出:

Simple java.util.HashMap:
    class java.util.HashMap
Anonymous class based on java.util.HashMap:
    class com.test.Demo$1
    class java.util.HashMap

注意此类匿名类的名称,并且该类扩展了java.util.HashMap

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-02-03
    • 1970-01-01
    • 2014-01-08
    • 1970-01-01
    • 1970-01-01
    • 2016-10-14
    • 2016-04-02
    • 2015-06-30
    相关资源
    最近更新 更多