我使用Play Framework 2.3我使用scala模板引擎在其他地方创建我的视图和Java。Scala - 未绑定的通配符异常(Play Framework 2.3模板)
我的模型延伸的抽象参数化的对象是这样的...(伪代码)
摘要对象:
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斯卡拉视图模板:
@*******************************************
* My helper
*******************************************@
@(myObj: some.namespace.MyObject[_])
@import some.namespace.MyObject
@doSomething(myInnerObj: MyObject[_]#MyInnerObject) = {
@* do some stuff *@
}
@for(myInnerObj <- myObj.getInnerObjects()) {
@doSomething(myInnerObj)
}
但是我得到说明
unbound wildcard exception
我不知道正确的Scala的语法来避免这个错误我曾天真地认为我行@doSomething(myInnerObj: MyObject[_]#MyInnerObject)
错误可以使用_
来指定任意的tyope,但它不会让我这样做。
什么是正确的语法?
更新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
这似乎是在旋转扭曲模板引擎不支持此语法目前,虽然我不是100%确定的。
你可能会对这个twirl github问题感兴趣:https://github.com/playframework/twirl/issues/37虽然它是一年前在playframework回购中首次提交的。 – 2015-03-15 00:49:01