searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

scala之with关键字

2023-05-31 02:16:43
14
0
  • 案例
package keyword

object WithKwDemo {
  def main(args: Array[String]): Unit = {
    val person = new Person("John", "Doe")
    person.greet()
  }
}
trait Logger {
  def log(message: String): Unit = println(s"Log: $message")
}
trait User {
  val name: String
}
class Person(val firstName: String, val lastName: String) extends User with Logger {
  val name = s"$firstName $lastName"
  def greet(): Unit = {
    log(s"Hello, my name is $name.")
  }
}​
  • 案例说明

定义了两个特质:LoggerUserLogger特质有一个名为log的方法,用于输出日志信息。User特质定义了一个抽象属性name,表示用户姓名。

创建了一个Person类,它继承自User特质并混入了Logger特质。Person类有两个构造函数参数firstNamelastName,它们用于初始化name属性。greet方法调用log方法输出问候信息。

输出结果Log: Hello, my name is John Doe.

小结可以看到,with关键字在Person类的定义中起到了混入Logger特质的作用,使得Person类具备了日志打印的功能。

 

  • 扩展

目前对一些优秀的开源框架,比如:Apache StreamPark 大量使用了该关键字,示例如下

 

 

0条评论
0 / 1000
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
l****n
3文章数
0粉丝数
l****n
3 文章 | 0 粉丝
原创

scala之with关键字

2023-05-31 02:16:43
14
0
  • 案例
package keyword

object WithKwDemo {
  def main(args: Array[String]): Unit = {
    val person = new Person("John", "Doe")
    person.greet()
  }
}
trait Logger {
  def log(message: String): Unit = println(s"Log: $message")
}
trait User {
  val name: String
}
class Person(val firstName: String, val lastName: String) extends User with Logger {
  val name = s"$firstName $lastName"
  def greet(): Unit = {
    log(s"Hello, my name is $name.")
  }
}​
  • 案例说明

定义了两个特质:LoggerUserLogger特质有一个名为log的方法,用于输出日志信息。User特质定义了一个抽象属性name,表示用户姓名。

创建了一个Person类,它继承自User特质并混入了Logger特质。Person类有两个构造函数参数firstNamelastName,它们用于初始化name属性。greet方法调用log方法输出问候信息。

输出结果Log: Hello, my name is John Doe.

小结可以看到,with关键字在Person类的定义中起到了混入Logger特质的作用,使得Person类具备了日志打印的功能。

 

  • 扩展

目前对一些优秀的开源框架,比如:Apache StreamPark 大量使用了该关键字,示例如下

 

 

文章来自个人专栏
scala
1 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0