我看到了由同事编写的单个方法类的以下代码:
class Foo(boo: Boo){
def doSomething() {...}
}其中有使用应用程序配置数据的数据初始化。我想知道它比下面的方法有什么好处。
object Foo {
def doSomething(boo: Boo){...}
} 我认为,这种方法更适合于这样一种情况,即在某个地方创建一个而不是类,并且在另一个地方调用该方法,在那里没有对参数的访问。据我所见,它没有在上面描述的情况中使用。在这两种方法的比较方面还有什么?
发布于 2016-05-31 17:58:50
第二种方法在内存和性能方面更好,因为它不需要每次调用该方法时都需要对象实例化。
但是,如果要添加新参数,第一种方法可能更易于维护。如果在方法中完成的计算需要对Foo的特定实例进行某种形式的缓存,则还可以添加新字段。
一般来说,这取决于更广泛的情况,哪种方式应该更好。对于配置数据或其他上下文持有者,第二种方法可能更有意义,因为这些方法无论如何都不应该被一些随机实例引用。
发布于 2016-05-31 17:59:04
这主要是品味的问题。我同意您的看法,在这里使用object可能更好,也是因为它避免了类Foo的不必要分配。另一方面,值类也是“无分配的”,并且在幕后执行类似于单例对象的操作:
trait Boo
class Foo(val boo: Boo) extends AnyVal {
def doSomething() = ???
}https://stackoverflow.com/questions/37552355
复制相似问题