一个简单的问题。像这样的方法是好的做法吗?
private NavigableMap<Double, Site> m_sites;
private Site getRandomSite()
{
return m_sites.ceilingEntry(Math.random()).getValue();
}
或者它是不好的,因为它是一个吸气剂,你可以期望它会返回“randomSite”字段?
答案 0 :(得分:3)
如果您(代码的作者)认为对于其余代码库感到困惑/不好,那么将名称更改为例如generateRandomNumber()
。但是,没有任何惯例表明&#34; get方法&#34;必须总是返回一个字段。
答案 1 :(得分:3)
方法很好,虽然我可以理解你不想把它称为getRandomSite()
,因为它看起来像一个getter方法。基于Gio的答案,我建议你调用方法fetchRandomSite()
,因为正如你所说,这种方法不会生成随机网站,它只是从NavigableMap中挑选(或取出)。
答案 2 :(得分:2)
一个吸气剂可以得到任何东西(返回任何东西)。并不意味着它只返回某个字段的值。您当前的方法没有问题。
答案 3 :(得分:1)
不,这是不好的做法。这样的方法应该是静态的,并且封装在实用程序类中,因为它们没有任何暗示它们与封闭类相关联。此外,实用程序类应该有一个私有构造函数,因此不能意外地实例化它。
可能有用的情况是MyClass.allocateNextUniqueKey()。但是在这种情况下,该方法不应该分配已经使用过的密钥,因此它肯定与MyClass有关联。
答案 4 :(得分:0)
如果你的方法确实计算了某些东西,那么表示这种行为的方法名称可能更好:
private NavigableMap<Double, Site> m_sites;
private Site pickRandomSite()
{
return m_sites.ceilingEntry(Math.random()).getValue();
}
在任何情况下,它是否是一个真正的吸气者(这是一种虚拟方法,缺乏像C#这样的属性或者对于struct
等效的公共领域的恐惧),是唯一的问题是方法名称反映了它的目的。
示例:不要给getSite()
一个会返回随机网站的方法。
另一方面,getRandomSite
的错误是什么 - 比使用m_sites
还要多。我知道这是一个公司惯例,但它对我来说是混淆(我讨厌前缀成员/方法的范围命名约定)。
答案 5 :(得分:0)
有一些关于吸气剂的约定。如果有吸气剂,则可能存在相应的设定器。此setter必须使用与getter完全相同类型的一个参数。一些框架,例如Spring可以强制执行此操作。
回到你的问题,预计getters最后会返回一个字段。这并不意味着必须直接返回该字段。可能有例如延迟加载或转换(getDurationInMillis,getDurationInSeconds,...),但是如果没有进行任何更改,它是否真的需要get-Methods返回相同的值。 Math.random()似乎是一个很好的例子。它被称为random()而不是getRandom(),因为会返回更改值。
总之,如果一种方法不能满足所有的吸气剂期望,那么最好另外命名。获取,搜索,......