我看到同事编写的单个方法类的以下代码:
class Foo(boo: Boo){
def doSomething() {...}
}
其中有应用程序配置数据的数据初始化。我想知道它比以下方法有什么优势。
object Foo {
def doSomething(boo: Boo){...}
}
我认为,这种方法更适用于在某个地方创建而不是类的情况,并且在无法访问参数的其他地方调用该方法。就我所见,它并未在上述情况下使用。在比较这两种方法方面还有什么其他方面?
答案 0 :(得分:2)
第二种方法在内存和性能方面更好,因为每次只想调用该方法时都不需要对象实例化。
但是,如果要添加新参数,第一种方法可能更易于维护。如果在方法中完成的计算需要某种形式的Foo
特定实例的缓存,您还可以轻松添加新字段。
一般而言,取决于更广泛的背景,哪种方式应该是首选。对于配置数据或其他上下文持有者,第二种方法可能更有意义,因为这些随机实例不应该引用它们。
答案 1 :(得分:1)
这主要是品味问题。我同意你的观点,在这里使用object
可能更好,也因为它避免了不必要的类Foo
的分配。另一方面,值类也将是“免费分配”,并且在幕后执行类似于单例对象的操作:
trait Boo
class Foo(val boo: Boo) extends AnyVal {
def doSomething() = ???
}