当前位置: 首页 > 面试题库 >

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

山翼
2023-03-14
问题内容

在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();
      ()
    }
  }
}

问题答案:

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

考虑以下代码:

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构造函数。如果超类没有任何无参数的可访问构造函数,则必须编写一个显式构造函数。

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



 类似资料:
  • 问题内容: LINQ的Java等效项是什么? 问题答案: 现在使用Java 8向我们介绍了Stream API,这在处理集合时是类似的事情,但与Linq不太一样。 如果它是您正在寻找的ORM,例如Entity Framework,那么您可以尝试Hibernate

  • 问题内容: PHP具有 var_dump()函数,该函数输出对象的内部内容,显示对象的类型和内容。 例如: 将输出: Java中将执行相同操作的等效项是什么? 问题答案: 它不是Java中的嵌入式程序,因此您不会免费获得它。 它是通过约定而不是语言构造完成的。在所有数据传输类中(甚至 在您编写的所有类中…… ),您都应该实现一个明智的方法。因此,这里您需要在您的类中重写并返回所需的状态。 有一些实

  • 问题内容: Scala与Java的静态块等效吗? 问题答案: 伴随对象的构造函数(即主体)中的代码与Java类的静态初始化程序块中的代码 不 完全相同。在下面的示例中,我创建了A的实例,但是没有发生初始化。 要在创建类的第一个实例时触发伴随对象的构造,可以从类构造函数中访问它。 在许多情况下,差异并不重要。但是,如果您要发射导弹(或其他副作用),您可能会在意!

  • 问题内容: 将Java转换为C#时,将语言环境转换为CultureInfo的正确方法是什么? 我知道在C#中,我们拥有当前线程的文化,并且在某些情况下为了写文件而希望提供一致性。但是Java Locale.ROOT和Locale.getDefault()是什么意思,它们通常如何映射到C#中的选项? 问题答案: 好吧,多亏了Andreas,我可以从javadoc中进行总结: 和 我只是希望该文档更容

  • 问题内容: 就像在Java 8中(某种程度上)等同于Scala的类型一样,是否也等同于Scala的类型? 问题答案: Java 8 没有类型,因此您需要自己创建一个或使用一些第三方库。 您可以使用新类型来构建这样的功能(但请阅读此答案的结尾): 用例示例: 回顾起来,基于基础的解决方案更像是一个学术实例,而不是推荐的方法。一个问题是对“空” 的处理,这与“任一个”的含义相矛盾。 以下代码显示了一个

  • 问题内容: 有Swift的等效项吗?在中,我们通常使用: 如何在Swift中实现相同目标?我发现了一个功能: 但是,它很长,根本不方便。 问题答案: 将在斯威夫特的世界同样存在。 的,和参数均标有 该装置的同时调用该函数我们可以忽略这些参数的关键字。在这种情况下,将使用其默认值。 这得出一个结论,该方法调用可以简化为: Swift 5- 没什么变化,仍然可以这样工作。