gpt4 book ai didi

java - 这个 Java EnumSet 初始化构造如何工作?

转载 作者:行者123 更新时间:2023-12-02 05:52:56 25 4
gpt4 key购买 nike

我们有构造EnumMap<K,V>的习惯如下所示的实例EnumMapExample.java示例:

package test;

import java.util.EnumMap;

public class EnumMapExample {

enum TestEnum {SOME_VALUE, SOME_OTHER_VALUE}

private final EnumMap<TestEnum, String> myEnumMap = new EnumMap<TestEnum, String>(TestEnum.class) {
{
// How is this construct called?
put(TestEnum.SOME_VALUE, "someValue");
put(TestEnum.SOME_OTHER_VALUE, "someOtherValue");
}
};

public void printMyEnumMap() {
for (final TestEnum key : myEnumMap.keySet()) {
final String value = myEnumMap.get(key);
System.out.println("myEnumMap key: " + key + " has value " + value);
}
}

public static void main(final String[] args) {
new EnumMapExample().printMyEnumMap();
}
}

可能是一个有快速答案的问题,但我无法通过 Google 找到如何用这种方式填充 private final EnumMap<TestEnum, String> myEnumMap调用了 2 个(人为的)枚举类型,它是如何工作的?

问题细化:所以我打电话 new EnumMap<K,V>(SomeEnum.class){{ /* initialization code */ }};注意双花括号 {{ }}分号之前 ; 。双大括号是什么?

最佳答案

编辑:刚刚意识到您可能一直在寻求进行双括号初始化。

双括号初始化的工作原理是创建原始类的匿名子类并使用初始化 block 来更改该类。所以代码的工作方式如下:

static final EnumMapAnonSubclass<TestEnum, String> extends EnumMap<TestEnum, String> { // outer braces
{ // inner braces
put(TestEnum.SOME_VALUE, "someValue");
put(TestEnum.SOME_OTHER_VALUE, "someOtherValue");
}
// Implicitly created constructor
EnumMapAnonSubclass(Class<? extends TestEnum> clazz) {
super(clazz);
}
};

私有(private)最终 EnumMap myEnumMap = new EnumMapAnonSubclass(TestEnum.class)

如果您只想创建EnumMap,那么您已经拥有了所需的一切。

private final EnumMap<TestEnum, String> myEnumMap = new EnumMap<TestEnum, String>(TestEnum.class);

这就是创建 map 所​​需的一切。

如果您想在创建对象时使用某些值初始化映射,可以使用初始化 block ( http://docs.oracle.com/javase/tutorial/java/javaOO/initial.html ) 或在对象的构造函数中调用的方法。

因此,如果您想创建 map 并在其中粘贴内容,您的代码将如下所示:

// Create the EnumMap
private final EnumMap<TestEnum, String> myEnumMap = new EnumMap<TestEnum, String>(TestEnum.class);
// Use an initialization block to put some values in it when an instance of EnumMapExample is created
{
put(TestEnum.SOME_VALUE, "someValue");
put(TestEnum.SOME_OTHER_VALUE, "someOtherValue");
}

关于java - 这个 Java EnumSet 初始化构造如何工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23378845/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com