Java与Scala对象的等效项是什么?

Jus12:

在Scala中,我们可以编写

object Foo { def bar = {} }

编译器如何实现?我可以Foo.bar();从Java 拨打电话,但从new Foo();Java发出错误cannot find symbol symbol: constructor Foo()

  • JVM是否本地支持单例?
  • Java中是否可能有没有构造函数的类?

注意:这是代码输出 scalac -print

package <empty> {
  final class Foo extends java.lang.Object with ScalaObject {
    def bar(): Unit = ();
    def this(): object Foo = {
      Foo.super.this();
      ()
    }
  }
}
马尔科姆:

对单例的支持不在语言级别上,但是该语言提供了足够的功能来创建它们而没有任何麻烦。

考虑以下代码:

public class Singleton {
    private static final Singleton instance = new Singleton();

    // Private constructor prevents instantiation from other classes
    private Singleton() {}

    public static Singleton getInstance() {
        return instance;
    }
}

这是来自Wikipedia的示例,该示例说明了如何制作单例。实例保存在私有字段中,在类外部无法访问构造函数,该方法返回此单个实例。

至于构造函数:默认情况下,每个类都有一个所谓的默认构造函数,该构造函数不带任何参数,仅调用超类的no-args构造函数。如果超类没有任何无参数的可访问构造函数,则必须编写一个显式构造函数。

因此,一个类必须具有一个构造函数,但是如果超类具有一个无参数的构造函数,则不必编写它。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章