Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/313.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Java中静态初始化EnumMap的最佳方法是什么_Java_Enums_Static_Enum Map - Fatal编程技术网

在Java中静态初始化EnumMap的最佳方法是什么

在Java中静态初始化EnumMap的最佳方法是什么,java,enums,static,enum-map,Java,Enums,Static,Enum Map,我需要静态初始化EnumMap。我知道两种方法 Map()方法的使用 private static final Map TEST_Map=Map.of(枚举常量1,“值1”,枚举常量2,“值2”); 使用双括号初始化 private static final Map TEST\u Map=new EnumMap(EnumKey.class){ { put(枚举常量1,“值1”); put(枚举常量2,“值2”); } }; 还有其他更干净、更高效的方法吗?在静态块中执行: priva

我需要静态初始化EnumMap。我知道两种方法

  • Map()方法的使用
  • 
    
    private static final Map TEST_Map=Map.of(枚举常量1,“值1”,枚举常量2,“值2”);
    
  • 使用双括号初始化
  • 
    
    private static final Map TEST\u Map=new EnumMap(EnumKey.class){
    {
    put(枚举常量1,“值1”);
    put(枚举常量2,“值2”);
    }
    };
    

    还有其他更干净、更高效的方法吗?

    在静态块中执行:

    private static final EnumMap<....> yourMap = ...
    
    static {
       yourMap.put(....);
       yourMap.put(....)
    }
    
    private static final EnumMap yourMap=。。。
    静止的{
    你的地图;
    你的地图。放(…)
    }
    

    通过
    恒定动态

    在静态块中执行,将有不同的方法来执行此操作(但它们在API中还不存在):

    private static final EnumMap<....> yourMap = ...
    
    static {
       yourMap.put(....);
       yourMap.put(....)
    }
    
    private static final EnumMap yourMap=。。。
    静止的{
    你的地图;
    你的地图。放(…)
    }
    
    通过
    常量动态

    用一种方法来实现这一点,有很多不同的方法(但它们在API中还不存在):

    private static final EnumMap<....> yourMap = yourMapMethod();
    
    private static EnumMap<....> yourMapMethod() {
       EnumMap<....> yourMap = ...
       yourMap.put(....);
       yourMap.put(....);
       return yourMap;
    }
    
    private static final EnumMap yourMap=yourMapMethod();
    私有静态EnumMap yourMapMethod(){
    EnumMap yourMap=。。。
    你的地图;
    你的地图;
    归还地图;
    }
    
    用以下方法完成:

    private static final EnumMap<....> yourMap = yourMapMethod();
    
    private static EnumMap<....> yourMapMethod() {
       EnumMap<....> yourMap = ...
       yourMap.put(....);
       yourMap.put(....);
       return yourMap;
    }
    
    private static final EnumMap yourMap=yourMapMethod();
    私有静态EnumMap yourMapMethod(){
    EnumMap yourMap=。。。
    你的地图;
    你的地图;
    归还地图;
    }
    
    设置EnumMap的一种简洁方法是使用
    Map.of
    Map.of Entries
    在线定义所有值,但请注意,这会在EnumMap构造函数之前分配一个映射:

    private static final EnumMap<YourEnum,String> A = new EnumMap<>(Map.of(
            YourEnum.ONE, "Value1",
            YourEnum.TWO, "Value2"
    ));
    
    // Use Map.ofEntries for enums with more than 10 values:
    private static final EnumMap<YourEnum,String> B = new EnumMap<>(Map.ofEntries(
            Map.entry(YourEnum.ONE, "Value1"),
            Map.entry(YourEnum.TWO, "Value2")
    ));
    

    设置EnumMap的一种简单方法是使用
    Map.of
    Map.of entries
    在线定义所有值,但请注意,这会在EnumMap构造函数之前分配一个映射:

    private static final EnumMap<YourEnum,String> A = new EnumMap<>(Map.of(
            YourEnum.ONE, "Value1",
            YourEnum.TWO, "Value2"
    ));
    
    // Use Map.ofEntries for enums with more than 10 values:
    private static final EnumMap<YourEnum,String> B = new EnumMap<>(Map.ofEntries(
            Map.entry(YourEnum.ONE, "Value1"),
            Map.entry(YourEnum.TWO, "Value2")
    ));
    

    第二个是大反模式,第一个不初始化
    EnumMap
    ,但
    Map
    (不可变)第二个是大反模式,第一个不初始化
    EnumMap
    ,而是
    Map
    (不可变)在静态块中执行此操作的具体原因是什么?@sham还有其他原因吗?第一个看起来也不错。使用静态块更好吗?我得到了答案。“请注意,这个Map.of方法最多只支持10个键值对。”在你的文章中提到它-是的,我同意…我说的是
    Map.of
    ,它可以存储最多10个映射,这是由
    of entries
    在静态块中执行该操作的任何特定原因所克服的。@sham还有其他原因吗?第一个看起来也不错。使用静态块更好吗?我得到了答案。“注意,这个Map.of方法最多只支持10个键值对。”在你的文章中提到它-是的,我同意…我说的是
    Map.of
    ,它可以存储最多10个映射,这是由
    of entries
    克服的。感谢分享这种方法。感谢分享这种方法。