当前位置: 首页 > article >正文

7 scala的类构造器

在创建对象的时候,需要调用类的构造器。Scala 提供了主构造器和辅助构造器。

1 主构造器

与 Java 一样,如果我们没有特别定义,那么 Scala 提供的默认构造器是没有参数的。

我们可以在类名后,指定构造器的参数列表,列表里的参数将成为类的成员属性,这样的构造器叫做主构造器。定义的语法如下:

class 类名(var/val 参数名: 参数类型 = 默认值, var/val 参数名: 参数类型 = 默认值 ...) {
	// 构造器代码
}

下面的例子中,我们在主构造器中定义了 name, age, club 三个参数:

class FootballPlayer(name: String, age: Int = 20, club: String = "FIFA") {
  var price: Double = 100_0000

  def hello(): String = {
    s"${this.name} is in ${this.club}, ${this.age} years old. Pay ${this.price} dollar to purchase him."
  }
}

object App {
  def main(args: Array[String]): Unit = {
    val footBallPlayer = new FootballPlayer("Cristiano Ronaldo", 39, "Al-Nassr FC")
    println(footBallPlayer.hello())
  }
}

运行后,控制台输出:

Cristiano Ronaldo is in Al-Nassr FC, 39 years old. Pay 1000000.0 dollar if you want to purchase him.

2 辅助构造器

如果需要使用多种方式创建对象,可以使用辅助构造器。定义辅助构造器和定义方法类似,通过关键字 def 定义,不同的是,这个方法的名称固定为 this,语法如下:

def this(参数名: 参数类型, 参数名: 参数类型, ...) {
	// 构造器代码
}

例如:

/**
 * 球员信息类
 *
 * @param name 球员姓名
 * @param age  年龄
 * @param club 所在俱乐部
 */
class FootballPlayer(name: String, age: Int = 20, club: String = "FIFA") {
  /**
   * 身价
   */
  var price: Double = 100_0000

  /**
   * 辅助构造器
   *
   * @param name  球员姓名
   * @param age   年龄
   * @param club  所在俱乐部
   * @param price 身价
   */
  def this(name: String, age: Int, club: String, price: Double) = {
    // 调用主构造器
    this(name, age, club)
    this.price = price
  }

  def hello(): String = {
    s"${this.name} is in ${this.club}, ${this.age} years old. Pay ${this.price} dollar to purchase him."
  }
}

object App {
  def main(args: Array[String]): Unit = {
    val footBallPlayer = new FootballPlayer("Cristiano Ronaldo", 39, "Al-Nassr FC", 1200_0000)
    println(footBallPlayer.hello())
  }
}

http://www.kler.cn/a/234039.html

相关文章:

  • 一文简单了解Android中的input流程
  • ubuntu中apt-get的默认安装路径。安装、卸载以及查看的方法总结
  • Rust 所有权机制
  • 深入理解BERT模型配置:BertConfig类详解
  • Web大学生网页作业成品——婚礼婚纱网页设计与实现(HTML+CSS)(6个页面)
  • Java项目实战II基于微信小程序的个人行政复议在线预约系统微信小程序(开发文档+数据库+源码)
  • 物联网数据隐私保护技术
  • Java:JDK8新特性(Stream流)、File类、递归 --黑马笔记
  • MySQL数据库应用实验报告——实验1 表结构创建
  • 疑似针对安全研究人员的窃密与勒索
  • Element-ui date-picker组件报错 date.getHours is not a function
  • Lua: 一门轻量级、高效的脚本语言
  • HiveSQL——借助聚合函数与case when行转列
  • 【Java】案例:检测MySQL是否存在某数据库,没有则创建
  • DC-8靶机渗透详细流程
  • 怎么用postman调用webservice(反推SoapUI)
  • Ubuntu上开启SFTP服务教程
  • 软件安全测试报告如何编写?权威的安全测试报告如何获取?
  • Hive-架构与设计
  • CNN应用Keras Tuner寻找最佳Hidden Layers层数和神经元数量
  • vue3跨组件(多组件)通信:事件总线【Event Bus】
  • 修改GI文件的权限
  • 双活工作关于nacos注册中心的数据迁移
  • C#系列-C#访问MongoDB+redis+kafka(7)
  • Avalonia学习(二十三)-大屏
  • 方格定位2_题解