Java 良好的 HashMap 实践? (静态最终 HashMap)
Java good HashMap practices? ( static final HashMap )
private static final HashMap<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
static {
COMMAND_DIRECTORY.put("help", new Help());
}
此代码块是否包含不良的 HashMap 做法?
不建议这样写:
HashMap<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
更好的方法是这样写:
Map<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
这样,如果您将来决定选择不同的 Map
实施方式,它将更加简单,因为您不受特定实施方式的限制。
我宁愿避开尖叫的 case 变量,ide 会告诉你某些东西是最终的,你甚至在声明之前写 final。对于 static {}
,没有人使用它,从我的角度来看,它看起来有点太间接,因此我会写。
private static final HashMap<String, Commande> commandDirectory = new HashMap<String, Commande>(){{
put("help", new Help())
}};
无论如何,这就是我在严肃的代码库中看到的
是的。将可变 Map
保留为静态 final 是有问题的。
private static final Map<String, Commande> COMMAND_DIRECTORY;
static {
Map<String, Commande> directory = new HashMap<>();
directory.put("help", new Help());
COMMAND_DIRECTORY = Collections.unmodifiableMap(directory);
}
Map.of
最新版本的 Java 提供了 Map.of
方法来生成不可修改的 Map
具有方便的文字语法的对象。
private static final Map < String , Command > commands =
Map.of (
"help", new Help() ,
"whatever" , new Whatever()
)
;
正如其他人提到的,最好将您的变量声明为更抽象的类型、更通用的接口或 superclass,而不是狭义的具体类型。因此,将变量声明为 Map
比 HashMap
更好。对于此答案的代码,我们 必须 声明为 Map
,因为我们不知道 Map.of
可能实例化的具体 class。
正如其他人指出的那样,通常最好只在命名对象高度不可变的情况下使用所有大写名称。
private static final HashMap<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
static {
COMMAND_DIRECTORY.put("help", new Help());
}
此代码块是否包含不良的 HashMap 做法?
不建议这样写:
HashMap<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
更好的方法是这样写:
Map<String, Commande> COMMAND_DIRECTORY = new HashMap<>();
这样,如果您将来决定选择不同的 Map
实施方式,它将更加简单,因为您不受特定实施方式的限制。
我宁愿避开尖叫的 case 变量,ide 会告诉你某些东西是最终的,你甚至在声明之前写 final。对于 static {}
,没有人使用它,从我的角度来看,它看起来有点太间接,因此我会写。
private static final HashMap<String, Commande> commandDirectory = new HashMap<String, Commande>(){{
put("help", new Help())
}};
无论如何,这就是我在严肃的代码库中看到的
是的。将可变 Map
保留为静态 final 是有问题的。
private static final Map<String, Commande> COMMAND_DIRECTORY;
static {
Map<String, Commande> directory = new HashMap<>();
directory.put("help", new Help());
COMMAND_DIRECTORY = Collections.unmodifiableMap(directory);
}
Map.of
最新版本的 Java 提供了 Map.of
方法来生成不可修改的 Map
具有方便的文字语法的对象。
private static final Map < String , Command > commands =
Map.of (
"help", new Help() ,
"whatever" , new Whatever()
)
;
正如其他人提到的,最好将您的变量声明为更抽象的类型、更通用的接口或 superclass,而不是狭义的具体类型。因此,将变量声明为 Map
比 HashMap
更好。对于此答案的代码,我们 必须 声明为 Map
,因为我们不知道 Map.of
可能实例化的具体 class。
正如其他人指出的那样,通常最好只在命名对象高度不可变的情况下使用所有大写名称。