当我在代码下面运行时,不会调用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方法没有正确实现吗?
答案 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()
。