减少类继承中的样板

时间:2015-06-23 09:41:11

标签: scala inheritance properties constructor

我想知道在这种情况下是否有减少样板代码的技巧:从类继承(让我们假设现实世界中有更多的构造函数参数)。

consul_command: "-join {{ ansible_groups['tag_consul_server'][0] }}"

我见过一些strategies that involved the use of traits

Having an abstract base class is not an option

2 个答案:

答案 0 :(得分:1)

问题是,你真的需要扩展基类吗?您链接的特征方法可能足以满足您的需求。

也就是说,让PersonEmployee同时使用方法namesurnamefullnameheader来实现特征:

trait PersonLike {
  def name: String
  def surname: String

  def fullname = name + " " + surname
  def header = "Dear " + name
}

让课程扩展特性:

case class Person(name: String, surname: String) extends PersonLike
case class Employee(name: String, surname: String, role: String) extends PersonLike

案例类可能更好,但您可以使用普通类:

class Person2(val name: String, val surname: String) extends PersonLike
class Employee2(val name: String, val surname: String, val role: String) extends PersonLike

答案 1 :(得分:0)

在构造函数中使用val可创建新的公共成员。使用

简化它
case class Person( name: String, surname: String ) {
  def fullname = name + " " + surname
  def header = "Dear " + name
}

class Employee( _name: String, _surname: String, val role: String )
extends Person( _name, _surname )

我还将Person改为case类,因此构造函数的参数成为公共字段。

如果您希望减少样板,我认为使用特征或其他技巧只需添加更多代码。所以,保持简单是我的建议。