gpt4 book ai didi

Scala案例类私有(private)构造函数不是私有(private)的

转载 作者:行者123 更新时间:2023-12-04 10:15:38 25 4
gpt4 key购买 nike

今天遇到一个案例类构造函数的奇怪问题。我想将构造函数设为私有(private),看来这不是问题。所以我已经在我的一个项目中尝试过它并且它有效。但在另一个项目中,我可以调用私有(private)构造函数并进行编译。我认为这是我的想法,所以我制作了一个独立的类并用 scalac 编译它。它编译。这是代码:

package com.test

object Main {

def main(args: Array[String]) {
val bar = Bar("12345")
// bar.doStuff()
println(bar)
}
}

case class Bar private(foo: String){
private def doStuff():Unit = println("stuff")
}

有趣的是,如果我取消注释 bar.doStuff() 它将无法编译。所以我假设在这种情况下私有(private)作品,但不知何故不适用于构造函数。我究竟做错了什么?
Scalac 是 2.11.8

最佳答案

符号 val bar = Bar("12345")val bar = Bar.apply("12345") 的简写,换句话说,它调用 apply (自动生成)companion object 的方法的案例类。

伴随对象可以访问私有(private)构造函数,这就是它起作用的原因。

(为什么要创建一个案例类的构造函数 private ?这听起来不是一个好主意)。

关于Scala案例类私有(private)构造函数不是私有(private)的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38097490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com