2015-03-13 59 views
0

我使用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%確定的。

+0

你可能會對這個twirl github問題感興趣:https://github.com/playframework/twirl/issues/37雖然它是一年前在playframework回購中首次提交的。 – 2015-03-15 00:49:01

回答

0

我可以完全刪除doSomething方法解決問題...

@******************************************* 
* My helper 
*******************************************@ 

@(myObj: some.namespace.MyObject[_]) 

@import some.namespace.MyObject 

    @for(myInnerObj <- myObj.getInnerObjects()) { 
     <div>@myInnerObj.getSomeProperty()</div> 
    } 

但我布特10%滿意的解決方案...它的工作原理至少但是感覺非常限制,我不能委託給方法來幫助保持我的代碼可維護性。從評論的角度來看,問題似乎是Twirl中的一個限制,不允許視圖中的函數的類型參數。

注:我已經接受了這個答案,因爲它消除了原始問題的例外,但這只是因爲我想要的解決方案不存在。

相關問題