加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Scala中的匿名子类

发布时间:2020-12-16 18:22:26 所属栏目:安全 来源:网络整理
导读:我试图理解 Scala中的Anonymous子类.我写了下面的代码: package com.sudipta.practice.chapter8class Person(val name: String) { def printMyName = println("Name: " + name)}class AnonymousSubclass(val name: String) { val anonymousSubclass = new P
我试图理解 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中Anonymous Subclass的用法/优点是什么.如果您有任何积分,请在此处分享.谢谢.

Regadrs,
Sudipta

解决方法

在Scala中使用匿名子类与使用 anonymous subclasses in Java没什么不同.在Java中最常见的用法可能是在 observer pattern中,如第一个链接所示.

该示例直接转换为Scala:

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

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

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

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

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读