我试图理解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
在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中,您可以在这种情况下使用匿名子类,如果:
java.awt.MouseListener)这些当然只是一些例子.在没有命名类对您有意义的任何位置,您可以使用匿名(子)类.
| 归档时间: |
|
| 查看次数: |
6454 次 |
| 最近记录: |