在Java中键入本地集合的约定

Dus*_*sty 2 java coding-style naming-conventions

我最近遇到了一组代码,它实例化了本地地图如下:

HashMap<String, Object> theMap = new HashMap<String, Object>();
Run Code Online (Sandbox Code Playgroud)

通常,当我看到使用HashMaps(并自己使用它们)时,局部变量就是Map(接口),而不是绑定到特定的实现.显然,如果Map可以将其实例化为Map各种类型(例如,接受参数),则这是必需的.但是,在类似于上面的内容的情况下,它在同一点被定义和实例化,是否只有使用接口类型的潜在原因,或者它只是样式/约定?

Jon*_*eet 7

(我最初误解了基于标题的问题,但我已经包含了类型和变量约定,因为它们都很有趣.)

重要的是它是一张地图:你要看的东西.其余的是一个实现细节.

我建议给它一个语义名称,例如

Map<String, Object> nameToSessionMap = ...
Run Code Online (Sandbox Code Playgroud)

......那样当你阅读代码时,你就会知道键和值是什么意思.

作为类型的变量-再次,我通常使用的界面,而不是部分,因为它表明我没有使用其特定于类型的任何成员的实现.我不想强调在执行代码,通常...这意味着,当我关于实施照顾,我可以作出这样的更加明显.


Jam*_*uis 6

将对象声明为Map将允许编译器保护您不要调用特定于的方法HashMap.这将允许您Map在将来替换另一个实现,而不必担心Map接口中不存在方法调用.