1. ホーム
  2. scala

[解決済み] Scala 無名クラスでextendsを使用する方法

2022-02-14 22:10:14

質問

ScalaでAnonymousクラスから別のクラスを拡張する方法はありますか?つまり、以下のようなものです。

abstract class Salutation {
  def saybye(): String = "Bye"
}

class anotherClass() {
  def dummyFunction() = {

    val hello = new {
      def sayhello(): String = "hello" 
    } extends Salutation

    val hi  = hello.sayhello //hi value is "Hello"
    val bye = hello.saybye   //bye value is "bye"
  }
}

解決方法は?

うん、Javaとほとんど同じに見えるね。

abstract class Salutation {
  def saybye: String = "Bye"
}

val hello = new Salutation {
  def sayhello: String = "hello" 
}

val hi = hello.sayhello
val bye = hello.saybye

もし Salutation は、抽象クラスやトレイトで sayhello メソッドに同じシグネチャがあれば、実装を提供したことになります。そうでなければ、無名構造型のインスタンスを作成したことになります。

hello: Salutation{def sayhello: String}

を呼び出すことに注意してください。 sayhello そのため、このメソッドを多用する場合は、新しい trait または class を定義する必要があります。