我在scala中使用的Java对象被多次创建

时间:2016-11-08 12:29:22

标签: java scala playframework

我使用Play Framework 2.5,我在模板中使用了几个JAVA类。我用

创建了一次对象
@import MyClass;
@foo = @{new MyClass(bar)}

只有那个代码,MyClass的构造函数没有被调用(我已经在构造函数中放了一个调试输出,也检查了它的调用)

现在我使用JAVA类的功能,如

@foo.getMeSomeBar()

模板中的某个地方。现在,调用构造函数。问题:每次我在同一个模板中使用该类的函数时,都会调用构造函数。

如果我将该scala变量传递给另一个模板,如

,则会出现同样的问题
@otherTemplate(foo)

每次在otherTemplate中使用foo时,都会调用构造函数。

这是理想的行为吗?如果是,为什么?如果不是,我该如何避免呢?

编辑:如果我在Controller中创建MyClass对象并将其从那里传递给模板,构造函数只被调用一次。但在某些情况下,如果必须在模板中创建MyClass,或者我必须更改很多类。

1 个答案:

答案 0 :(得分:2)

根据documentation,您不应使用 <footer> <div class="block three-cols"> <div>50%</div> <div>25%</div> <div>25%</div> <div>50%</div> <div>25%</div> <div>25%</div> <div>50%</div> <div>25%</div> <div>25%</div> </div> </footer>来定义可重用的值。首选方法是

@foo = @{ ... }

您的方式可能会产生意外结果,例如每次调用时都会重新运行块中的代码。