1

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

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

当我将其编译为

scalac MyComp.scala

它创建一个私有构造函数。但是当我制作一个伴随对象而不是构造函数成为 public 时,我无法理解这个概念。请清除

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

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

1 回答 1

6

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

因此,scalac 只好将MyCompJava 字节码的构造函数设为 public,否则 JVM 将不允许MyComp$(其伴生的类MyComp,通常称为模块类)实例化MyComp. 从 JVM 的角度来看,这是完全无关MyComp的。MyComp$

Scalac 尽量保持可见性修饰符,但有时必须增加字节码中的可见性以支持某些特定于 Scala 的规则。

于 2015-06-23T18:40:28.350 回答