Scala中的匿名子类

Sud*_*Deb 4 scala

我试图理解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)
}
Run Code Online (Sandbox Code Playgroud)

但是我无法理解Scala中Anonymous Subclass的用法/优点是什么.如果您有任何积分,请在此处分享.谢谢.

Regadrs,Sudipta

gzm*_*zm0 9

在Scala中使用匿名子类与在Java中使用匿名子类没有什么不同.Java中最常见的用法可能是观察者模式,如第一个链接所示.

该示例直接转换为Scala:

button.addActionListener(new ActionListener() {
    def actionPerformed(e: ActionEvent) {
        // do something.
    }
});
Run Code Online (Sandbox Code Playgroud)

但是,在Scala中你可能宁愿使用匿名函数(如果库允许你):

button.addActionListener(e => /* do something */)
Run Code Online (Sandbox Code Playgroud)

在Scala中,您可以在这种情况下使用匿名子类,如果:

  1. 您的客户端要求您扩展给定的接口
  2. 您一次注册多个事件(例如a java.awt.MouseListener)

这些当然只是一些例子.在没有命名类对您有意义的任何位置,您可以使用匿名(子)类.