在构造函数中覆盖方法或传递函数

时间:2015-02-27 18:55:24

标签: scala

我正在设计一个类,并且一些方法被设计为在子类中被覆盖。以下哪种方式更好或哪些方面有利有弊?

方式1:

class Foo(foo: (Int) => Unit = _=>{})

方式2:

class Bar {
  def bar(int: Int) = {}
}

我理解foo是一个函数值,bar是一个方法(因此foo无法定义参数的默认值)而Bar可能是一个特征(不同于Foo),但还有更多吗?

1 个答案:

答案 0 :(得分:0)

在第一种情况下,Foo的每个实例都可以传入不同的函数。在第二种情况下,每个函数都需要一个不同的子类。

哪个更好?这取决于你需要什么。如果第二个子类样式适用于您的应用程序,它可能更好,因为代码可能更容易理解。但是如果你真的需要将函数与这个类层次结构的实现分离 - 给客户端代码提供足够的灵活性 - 那么就使用第一个。

第二种风格在某些情况下也可能略快一些,但很少重要。