Scala 没有为同伴 class 创建私有构造函数
Scala is not creating private constructor for companion class
我是 scala 的新手,正在尝试了解 scala oops 概念。
我创建了一个 class 作为:
class MyComp private{
// some fields and method goes here
}
当我将其编译为
scalac MyComp.scala
它创建一个私有构造函数。但是当我创建一个伴随对象而不是构造函数时 public ,我无法理解这个概念。请澄清
这是 MyComp class
伴随对象的代码
object MyComp
{
private val comp= new MyComp;
def getInstance= comp;
}
JVM 不理解伴随对象的概念(以及 Scala 语言的其他概念)。
因此,scalac 别无选择,只能根据 Java 字节码构造 MyComp
public 的构造函数,否则 JVM 将不允许 MyComp$
( MyComp
的伴侣 class,通常称为模块 class) 来实例化 MyComp
。这是因为从 JVM 的角度来看 MyComp
和 MyComp$
完全无关。
Scalac 尝试在最大努力的基础上保持可见性修饰符,但有时必须增加字节码中的可见性以支持一些特定于 Scala 的规则。
我是 scala 的新手,正在尝试了解 scala oops 概念。 我创建了一个 class 作为:
class MyComp private{
// some fields and method goes here
}
当我将其编译为
scalac MyComp.scala
它创建一个私有构造函数。但是当我创建一个伴随对象而不是构造函数时 public ,我无法理解这个概念。请澄清
这是 MyComp class
伴随对象的代码object MyComp
{
private val comp= new MyComp;
def getInstance= comp;
}
JVM 不理解伴随对象的概念(以及 Scala 语言的其他概念)。
因此,scalac 别无选择,只能根据 Java 字节码构造 MyComp
public 的构造函数,否则 JVM 将不允许 MyComp$
( MyComp
的伴侣 class,通常称为模块 class) 来实例化 MyComp
。这是因为从 JVM 的角度来看 MyComp
和 MyComp$
完全无关。
Scalac 尝试在最大努力的基础上保持可见性修饰符,但有时必须增加字节码中的可见性以支持一些特定于 Scala 的规则。