这种apply方法是否正确定义?

时间:2013-04-23 13:49:29

标签: scala

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

Java:

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()方法吗? apply方法没有正确实现吗?

1 个答案:

答案 0 :(得分:2)

在Scala中,构造函数 apply 方法之间存在差异。看来你希望apply方法就像一个构造函数。但是,构造函数是名为def this(...)的方法。因此,您没有定义构造函数。

可以像使用任何其他方法(.apply())或使用parantheses(())一样使用名称来调用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()