我如何预加载的对象一个HashMap(无put方法)?(how do i preload a has

2019-09-19 03:34发布

我有一个类,它有一对夫妇的数据结构,这其中是一个HashMap。 但我想,所以我需要预装它HashMap中有默认值。 如何做到这一点,因为我不能把使用方法的对象里面?

class Profile
{
    HashMap closedAges = new HashMap();
    closedAges.put("19");
}

我用这个固定的,但我不得不对象中使用的方法。

class Profile
{   
    HashMap closedAges = loadAges();
    HashMap loadAges()
    {
        HashMap closedAges = new HashMap();

        String[] ages = {"19", "46", "54", "56", "83"};
        for (String age : ages)
        {
            closedAges.put(age, false);
        }
        return closedAges;
    }
}

Answer 1:

你可以这样做:

Map<String, String> map = new HashMap<String, String>() {{
   put("1", "one");
   put("2", "two");
   put("3", "three");
}};

这个Java成语叫做双括号初始化

第一支撑创建一个新的AnonymousInnerClass,第二声明当匿名内部类被实例化,当运行一个实例初始化代码块。



Answer 2:

你想这样做,在你的类的构造函数,例如

class Example {

   Map<Integer, String> data = new HashMap<>();

   public Example() {
      data.put(1, "Hello");
      data.put(2, "World");
   }
}

或使用Java的畸形双括号初始化功能:

class Example {

   Map<Integer, String> data;

   public Example() {
        /* here the generic type parameters cannot be omitted */
        data = new HashMap<Integer, String>() {{
           put(1, "Hello");
           put(2, "World");
      }};
   }
}

最后,如果你HashMap是你的类的静态字段,可以进行内部初始化static块:

static {

   data.put(1, "Hello");
   ...
}

为了解决Behes评论,如果你不使用Java 7,填写<>括号与类型参数,在这种情况下<Integer, String>



文章来源: how do i preload a hashmap in an object(without put method)?
标签: java map hashmap