Scala Traits - как реализовать метод - PullRequest
0 голосов
/ 29 апреля 2018

Как правильно расширить и реализовать метод sendEmail из Person черта (интерфейс) внутри Employee объекта ниже для выполнения основного:

trait Person {
  var name:String
  var gender:Char
  def sendEmail(subject:String, body:String)

}

object Employee extends Person {
  def main(args: Array[String]): Unit = {
    println("Hello")
    sendEmail("a", "b")

    def sendEmail(subject:String, body:String): Unit = {
      println("subject" + body)
    }

  }
}

Ответы [ 2 ]

0 голосов
/ 29 апреля 2018

Вам нужно будет реализовать все члены и методы, объявленные в признаке Person. Кроме того, если у вас несколько сотрудников, class (или case class) может быть более подходящим, чем object:

trait Person {
  val name: String
  val gender: Char
  def sendEmail(subject: String, body: String): Unit
}

class Employee(val name: String, val gender: Char) extends Person {
  def sendEmail(subject: String, body: String): Unit =
    println(s"subject: $subject\n   body: $body")
}

object ListEmployees {
  def main(args: Array[String]) {
    val emp1 = new Employee("Dave", 'M')
    val emp2 = new Employee("Jenn", 'F')

    emp1.sendEmail("yo", "yo yo yo")
    emp2.sendEmail("boo", "boo boo boo")
  }
}

ListEmployees.main(Array())
// subject: yo
//    body: yo yo yo
// subject: boo
//    body: boo boo boo
0 голосов
/ 29 апреля 2018

Метод должен быть членом объекта, а не функцией внутри другой функции (основной). Попробуйте:

object Employee extends Person {

  def sendEmail(subject:String, body:String): Unit = {
    println("subject" + body)
  }
  def main(args: Array[String]): Unit = {
    println("Hello")
    sendEmail("a", "b")
  }
}
...