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

时间:2015-06-23 18:32:13

标签: scala companion-object

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

class MyComp private{
    // some fields and method goes here
    }

当我将其编译为

scalac MyComp.scala

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

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

object MyComp
{
    private val comp= new MyComp;
    def getInstance= comp;
}

1 个答案:

答案 0 :(得分:6)

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

因此,scalac别无选择,只能根据Java字节码使MyComp的构造函数公开,否则JVM将不允许MyComp$MyComp的伴随类,通常称为模块类)来实例化MyComp。这是因为MyCompMyComp$与JVM的观点完全无关。

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