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

scala中的构造函数(主/辅助/默认主)

发布时间:2020-12-16 09:01:37 所属栏目:安全 来源:网络整理
导读:Cay Horstmann的“不耐烦的斯卡拉”书的一个相当简单的练习让我感到困惑.这是关于主要,辅助和默认的主要构造函数: ex 5.10?: Consider the class class Employee(val name: String,var salary: Double) { def this() { this("John Q. Public",0.0) }} Rewri
Cay Horstmann的“不耐烦的斯卡拉”书的一个相当简单的练习让我感到困惑.这是关于主要,辅助和默认的主要构造函数:

ex 5.10?:
Consider the class

class Employee(val name: String,var salary: Double) {
  def this() { this("John Q. Public",0.0) }
}

Rewrite it to use explicit fields and a default primary constructor.

我不知道我应该做什么你们中有些人可以提出解决方案吗?

但是,尝试解决这个问题可能会让我意识到我以前没有注意过的关于主构造函数和val域的信息(可以看出,我不太确定):

如果我说一个val字段(上面的Employee类中的名称)只能通过主构造函数初始化,而不是由辅助字段初始化,我是对的吗?在后一种情况下,编译器会将其视为导致错误的val域的重新分配.

起初我以为要把字段当作一个粗略的,相当于java中的最后一个字段,期望在任何构造函数中首次分配它们是合法的,但是似乎我错了.

我不太满意只是一个野蛮的猜测,所以我会感激,如果有人可以给我更准确的信息这一点.

解决方法

从“Scala第2版编程”第6.7段开始:

In Scala,every auxiliary constructor must invoke another constructor of the same class as its first action.
The net effect of this rule is that every constructor invocation in Scala will end up eventually calling the primary constructor of the class. The primary constructor is thus the single point of entry of a class.

所以用于初始化val的所有数据必须在主构造函数中.

你有明确领域的课程可能类似于:

class Employee(n: String = "John Q. Public",s: Double = 0.0) {
  val name = n
  var salary = s
}

或没有默认参数值:

class Employee(n: String,s: Double) {
  def this() = this("John Q. Public",0.0)
  val name = n
  var salary = s
}

(编辑:李大同)

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

    推荐文章
      热点阅读