2016-05-31 41 views
1

我看到由同事写入一个方法类以下代码:单次提取类途径

class Foo(boo: Boo){ 
    def doSomething() {...} 
} 

其中存在数据初始化用应用的配置数据。我想知道它比以下方法有什么优势。

object Foo { 
    def doSomething(boo: Boo){...} 
} 

的做法,我认为,这就是其中的而不是类在一个地方创建一个更好的情况和方法在那里没有访问参数另一个地方调用。对于我所看到的,在上述情况下并未使用。还有什么比较这两种方法?

回答

2

第二种方法在内存和性能方面更好,因为每次只需调用该方法时都不需要实例化对象。

但是,如果您想添加新参数,第一种方法可能更易于维护。如果在该方法中完成的计算需要某种形式的针对Foo的特定实例的某种形式的缓存,则还可以稍微添加新字段。

一般来说,取决于更广泛的上下文,哪种方式应该是首选。对于配置数据或其他上下文持有者,第二种方法可能更有意义,因为无论如何都不应该被一些随机实例引用。

+0

谢谢你的投入。我从不以时尚的方式编写我的代码。代码让我想知道我是否错过了过去的事情。认为在构造函数需要很长时间才能完成的情况下,这种第一种方法的另一个优点。在这种情况下,构造函数可以在应用程序启动过程中调用。 – TeeKai

+0

我认为这很大程度上是Java开发趋于完成的宿醉。在Spring/Guice中,如果你使用第一种方法,那么让框架为你管理Foo的配置和注入会很简单。 – Caoilte

1

这主要是一个味道问题。我同意你的看法,可能在这里使用object会更好,因为它避免了Foo类的不必要分配。另一方面,值类也将“免费分配”,并在幕后做类似于单例对象:

trait Boo 

class Foo(val boo: Boo) extends AnyVal { 
    def doSomething() = ??? 
}