如何在Scala中定义无参数构造函数

时间:2010-07-19 20:52:40

标签: scala scala-2.8

这个问题太愚蠢......无论如何,我找不到正确的信息,因为我看到的每个Scala构造函数示例类都至少使用一个参数。

我希望将这个类从Java翻译成Scala:

public class SubscriptionConverter extends Converter {
  public SubscriptionConverter() {
    Context ctx = new InitialContext();
    UserEJB userEJB = (UserEJB) ctx.lookup("java:global/teachernews/UserEJB");
  }
  (...)
}

所以我只有一个无参数构造函数。我在Scala中乱搞了这个(),但是我无法得到类似于上面工作的例子。 我如何在Scala中编写它?

2 个答案:

答案 0 :(得分:11)

在类级别声明的任何语句都作为默认构造函数的一部分执行。所以你只需要做这样的事情:

class SubscriptionConverter extends Converter {
  val ctx = new InitialContext
  val userEJB = ctx.lookup("java:global/teachernews/UserEJB")
  (...)
}

答案 1 :(得分:4)

@dbyrne涵盖了最重要的部分,但我会添加一些侧面细节。

  1. 如果一个类没有参数,并且它是不可变的,请考虑将其声明为一个对象。
  2. 由类级别的语句和类名后面的参数列表定义的构造函数称为主构造函数。 *辅助构造函数*由def this() = ...定义。与Java不同,每个辅助构造函数都必须委托给主构造函数。
  3. 当您声明具有零参数列表的主构造函数时,编译器将自动添加单个空参数列表。如果使用一个隐式参数列表定义构造函数,编译器将在此之前添加一个空参数列表。