0

当我在下面运行代码时,未调用 apply 方法:

爪哇:

public class Driver {

    public static void main(String args[]){

        new parallel.TestData();
    }

}

斯卡拉:

package parallel

class TestData {
    def apply() = {
      println("in apply method ")
    }
}

如果我使用:

new parallel.TestData().apply();

那么apply方法被正确调用,但是apply()方法不应该从上面的代码中隐式调用吗?应用方法是否未正确实现?

4

1 回答 1

2

在 Scala 中,构造函数应用方法是有区别的。您似乎希望 apply 方法像构造函数一样工作。但是,构造函数是一个名为def this(...). 因此,您没有定义构造函数。

apply 方法可以像任何其他方法一样使用名称来调用 ( .apply()) 或使用括号 ( ())。创建类的新实例后,您仍然需要调用 apply 方法。

因此,您可以创建类的新实例并调用apply

new parallel.TestData()()
//                   ^  ^---- apply method
//                   |------- constructor

或者你可以实现一个对象而不是一个类

object TestData {
    def apply() = {
      println("in apply method ")
    }
}
parallel.TestData()

更新:从 Java 调用 Scala 代码时,您必须坚持第一种方法。由于 Java 没有为 apply 方法添加语法糖,因此您可以选择显式调用:new parallel.TestData().apply().

于 2013-04-23T14:00:30.610 回答