gpt4 book ai didi

java - 变量声明 : why interface

转载 作者:行者123 更新时间:2023-11-30 06:33:46 25 4
gpt4 key购买 nike

我最近一直在用 Java 做一些 sax 解析。我注意到命名空间映射的初始化

private Map<String,String> namespaceMappings = new HashMap<String,String>();

我的问题是为什么我们在这里创建一个 Map 变量而不是 HashMap
此外,如果我要使用 getNamespaceMappings 字段,我应该返回什么类型?

public Map<String,String> getNamespaceMappings() {
return namespaceMappings;
}

public HashMap<String,String> getNamespaceMappings() {
return (HashMap<String,String>) namespaceMappings;
}

public Map<String,String> getNamespaceMappings() {
return (HashMap<String,String>) namespaceMappings;
}

最佳答案

您应该始终将变量和返回类型声明为尽可能最少的专用类,或者理想情况下,声明为接口(interface),以便您可以随时更改实现。

例如,如果在某些时候您决定要使用 TreeMap 而不是 HashMap,那么您只需要更改:

private Map<String,String> namespaceMappings = new HashMap<String,String>();

到:

private Map<String,String> namespaceMappings = new TreeMap<String,String>();

无需对代码进行其他更改。

不过,您从中获得的最大值(value)在于您的类(class)所公开的内容。因此,例如,如果方法 getNamespaceMappings() 返回一个 Map,那么使用该方法的每一段代码都将简单地知道它们将使用一个 map 。如果在某个时候您决定在内部将此映射表示为 HashMap 以外的其他内容,那么您会将其保留在您的类内部。

如果您让该方法返回一个 HashMap,那么您将公开实现细节。将来,如果您想使用 HashMap 以外的东西,则需要更改使用此类的所有代码以适应这种情况。

关于java - 变量声明 : why interface,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7703175/

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