4

Scala の Anonymous サブクラスを理解しようとしています。私は以下のコードを書きました:

package com.sudipta.practice.chapter8

class Person(val name: String) {
  def printMyName = println("Name: " + name)
}

class AnonymousSubclass(val name: String) {
    val anonymousSubclass = new Person(name){
      def sayHello = "Hello, " + name
      def sayBye = "Bye, " + name
      override def printMyName = println("My name is: " + name)
    }

}

object testPerson extends App {

  def printAnonDetails (myObject: AnonymousSubclass) = {
    myObject.anonymousSubclass.printMyName
  }

  val personObject = new Person("Sudipta")
  personObject.printMyName

  val anonObject = new AnonymousSubclass("Sudipta")

  printAnonDetails(anonObject)
}

しかし、Scala での匿名サブクラスの使用法/利点を理解できません。ポイントがあれば、ここで共有してください。ありがとう。

よろしく、スディプタ

4

2 に答える 2

9

Scala での匿名サブクラスの使用は、Java での匿名サブクラスの使用と同じです。Java で最も一般的に使用されるのは、最初のリンクに示されているように、おそらくオブザーバー パターンです。

この例は直接 Scala に変換されます。

button.addActionListener(new ActionListener() {
    def actionPerformed(e: ActionEvent) {
        // do something.
    }
});

ただし、Scala ではおそらく無名関数を使用することをお勧めします (ライブラリで許可されている場合)。

button.addActionListener(e => /* do something */)

Scala では、次の場合に匿名サブクラスを使用できます。

  1. クライアントは、特定のインターフェイスを拡張する必要があります
  2. 一度に複数のイベントに登録します (たとえば、java.awt.MouseListener)

もちろん、これらは単なる例です。クラスに名前を付けないことが理にかなっている場所では、匿名 (サブ) クラスを使用できます。

于 2013-09-15T15:10:27.203 に答える