我使用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