我写了一个名为Cache [A,B]的Scala特性来提供一个缓存API。该缓存具有以下方法:asyncGet(),asyncPut(),asyncPutIfAbsent(),asyncRemove()。我将要有几个静态方法,比如getOrElseUpdate(key:A)(op:=> B)。我不希望这样的方法在Cache特性中被抽象定义,因为我不希望每个Cache实现都必须为它提供一个实现,当它可以使用async *()方法写入一次时。在斯卡拉,公共静态方法的容器的复数对象名称?
在查看Google Guava和Java库的某些部分时,他们将公共静态函数放在一个接口名称复数的类中,所以“Caches”就是我会用到的名称。
实际上我喜欢这个命名方案,尽管我可以使用Cache伴侣对象。在我的很多代码中,我的许多伴侣对象都包含私有的val或def,因此我的API的用户需要查看伴随对象,看看他们可以从那里使用什么,或者是什么。
通过让一个名为“Caches”的对象与Java一致,并且清楚地表明只有公共函数。我倾向于使用“对象缓存”而不是“对象缓存”。
那么人们会怎么想?
你说得对。它不会工作。看起来静态方法中的Java代码是以某种方式“促进”某个对象的,例如,说它是不可变的,用别的东西来链接它,而不是调用本来是常规方法的东西。因此,我将#getOrElseUpdate()放入可以混合到具体Cache实现中的单独特征中。 – 2010-09-23 19:05:51