【发布时间】:2015-03-13 16:56:11
【问题描述】:
我正在使用 Play Framework 2.3 我正在使用 scala 模板引擎在其他地方创建我的视图和 Java。
我的模型像这样扩展了一个抽象的参数化对象......(伪代码)
抽象对象:
public abstract class MyObject<T> {
// various bits
public class MyInnerObject {
// more stuff
}
}
模型对象(单例)
public class SomeModel extends MyObject<SomeBean> {
public static SomeModel getInstance() {
if (instance == null)
instance = new SomeModel();
return instance;
}
// more bits
}
然后我将模型从另一个视图助手传递给视图:
@MyHelper(SomeModel.getInstance())
MyHelper scala 视图模板:
@*******************************************
* My helper
*******************************************@
@(myObj: some.namespace.MyObject[_])
@import some.namespace.MyObject
@doSomething(myInnerObj: MyObject[_]#MyInnerObject) = {
@* do some stuff *@
}
@for(myInnerObj <- myObj.getInnerObjects()) {
@doSomething(myInnerObj)
}
但是我在@doSomething(myInnerObj: MyObject[_]#MyInnerObject) 声明的行上收到一个错误
unbound wildcard exception
我不确定避免这个错误的正确 Scala 语法我天真地假设我可以使用 _ 来指定任意类型,但它不会让我这样做。
正确的语法是什么?
更新 1
将方法定义更改为:
@doSomething[T](myInnerObj: MyObject[T]#MyInnerObject)
给出更多错误:
no type parameters for method doSomething: (myInnerObj:[T]#MyInnerObject)play.twirl.api.HtmlFormat.Appendable exist so that it can be applied to arguments (myObj.MyInnerObject)
--- because ---
argument expression's type is not compatible with formal parameter type;
found : myObj.MyInnerObject
required: MyObject[?T]#MyInnerObject
Twirl 模板引擎目前似乎不支持这种语法,尽管我不是 100% 确定。
【问题讨论】:
-
你可能对这个 twirl github 问题感兴趣:github.com/playframework/twirl/issues/37 不过,它是在一年前首次在 playframework 存储库中提交的。
标签: scala playframework playframework-2.3