我应该如何命名java.util.Map?[关闭]


77

我有一个java.util.Map从逻辑名称映射到与该名称一起使用的参数集的映射。

Map<String,Parameters> howShouldINameThee = ...;

该地图的最佳名字是什么?

我应该去简单,只需要调用这个parameters还是parametersMap

我是否在名称中包含有关密钥的信息,paramtersByName以便如何String更明显地使用密钥?

Answers:


99

地图将某些东西映射其他东西。
我喜欢使用uidToPerson。“到”是我可以想到的最短的明确方式,以表明我有一张地图。

编辑:
我要补充一点,我更喜欢用这种方式命名地图,因为“键”和“值”在名称中按该顺序出现。相对于valueByKey。在映射操作中,密钥优先。您put(key, value)get(key)那给了一个价值。

当然,这是个人喜好问题。


1
我使用此惯例,但不确定如何绘制地图……
Carl Pritchett 2014年

@CarlPritchett对我来说很不寻常,但是fooToBarToBaz呢?或bazByBarByFoo ...
Paolo Fulgoni

@PaoloFulgoni那是fooToBar-> Baz或foo-> BarToBaz吗?仍然含糊不清...
Carl Pritchett 2014年

1
@CarlPritchett如果您定期使用哈希图作为键,那么是的,这将是一个问题。在20年的编码中,我从未做到过或从未见过这样做。如果发生这种情况,我将不得不使用其他约定。
z5h 2014年

@ z5h是真的!但是我更多地在思考阅读有多么容易。我同意使用新名称会更好。
卡尔·普里切特2014年

32

我倾向于parametersByName不混淆内容的内容。Map。您永远都不知道何时需要重新访问长时间未使用的代码。

在Java中,parametersByNameMap由于键入是显式的,所以我发现不必包含数据结构的名称(如)。


您的最后一句话适用于地图,但不一定适用于列表,集合等
。– Walter Tross 2015年

6
通常认为用数据类型污染名称是一种不好的做法。它是多余的,在重构中不能很好地发挥作用,并且通过加长名称会损害可读性。
christopheml

14

您实际上是自己回答问题。

该地图的最佳名字是什么?

您想将地图映射到名称,所以您说“地图名称”!

我认为那应该是命名约定:valueForKey

有了其他建议keyToValue和valueByKey,我觉得您需要在单词末尾添加Map,例如:keyToValueMap,valueByKeyMap。当您使用For时,从语言上可以明显看出它是映射。


IMO,将值放在第一位(无论是在valueForKey还是valueByKey中),使您要检索的类型更加明显。由于valueForKey.get(key)给出了值,这是我在扫描时阅读的第一件事。
幽默的

1

在我的应用中,会有很多类型的参数。

例如,在GAE中,当我需要将http请求参数提取为可序列化形式时,我将映射命名为httpRequestParameters或httpReqParams。以sessionAttrs为例。

对于GWT RPC,客户端到服务器参数哈希,我将其命名为client2ServerParams或clnt2SrvrParms,并命名对应的server2clientParams或srvr2ClntParms。

在openid使用者中,我将地图命名为ConsumerAuthRequests或redirectFormParameters及其对应的providerResponses。

在重新格式化的输入Main参数的映射中,我将其称为inputArgs。

在我的情况下,httpRequestParametersBy名称,client2ServerParamsByName,consumerAuthAuthsByName,inputArgsByName或inputArgValueByKey等将是多余的,而且太长了,因为我总会知道映射的键始终是“名称”。我只是确保名称是复数形式,以便让我知道它是一个集合。

这种做法的例外情况是,当键不是名称而是对象时,我将地图命名为vehicleByDriver,projByMgr,toxicFoodListByAnimal。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.