Scala不会为伴侣类创建私有构造函数

opt*_*nal 1 scala companion-object

我是scala的新手并试图理解scala oops概念.我创建了一个类:

class MyComp private{
    // some fields and method goes here
    }
Run Code Online (Sandbox Code Playgroud)

当我编译它时

scalac MyComp.scala
Run Code Online (Sandbox Code Playgroud)

它创建了一个私有构造函数.但是当我创建一个伴侣对象而不是构造函数变得公开时,我无法理解这个概念.请清楚

这是MyComp类的伴随对象的代码

object MyComp
{
    private val comp= new MyComp;
    def getInstance= comp;
}
Run Code Online (Sandbox Code Playgroud)

gzm*_*zm0 6

JVM不理解伴随对象的概念(以及scala语言的其他方面).

因此,scalac别无选择,只能MyComp根据Java字节码制作public 的构造函数,否则JVM将不允许MyComp$(MyComp通常称为模块类的伴随类)进行实例化MyComp.这是,因为MyCompMyComp$都是从视点的JVM完全无关.

Scalac尝试尽最大努力保持可见性修饰符,但有时必须增加字节码中的可见性以支持某些特定于Scala的规则.