Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Scala中定义无参数构造函数_Scala_Scala 2.8 - Fatal编程技术网

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

如何在Scala中定义无参数构造函数,scala,scala-2.8,Scala,Scala 2.8,这个问题太愚蠢了。。。无论如何,我就是找不到正确的信息,因为我看到的每个Scala构造函数示例类都至少使用一个参数 我想把这个类从Java翻译成Scala: public class SubscriptionConverter extends Converter { public SubscriptionConverter() { Context ctx = new InitialContext(); UserEJB userEJB = (UserEJB) ctx.looku

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

我想把这个类从Java翻译成Scala:

public class SubscriptionConverter extends Converter {
  public SubscriptionConverter() {
    Context ctx = new InitialContext();
    UserEJB userEJB = (UserEJB) ctx.lookup("java:global/teachernews/UserEJB");
  }
  (...)
}
所以我只有一个无参数构造函数。我在Scala中使用了this(),但我无法获得类似的示例,如上面的示例。
如何在Scala中编写它?

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

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

@dbyrne已经介绍了最重要的部分,但我将添加一些次要细节

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

  • 您可能需要声明这些VAL
    private
    ——否则它们将是公共字段。在该代码中,变量是方法范围的局部变量,而在这里它们进入对象的每个实例。Scala 2.8的
    local
    在这里可能用于引入一个块。@Daniel我在哪里可以阅读有关local的更多信息?找不到任何信息,即使是2.8语言也找不到reference@ifischer
    locally
    是在
    scala.Predef
    上定义的,它实际上什么都不做。这只是为了使悬挂块(嵌套块)看起来更好。