2015-03-13 61 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中的一个限制,不允许视图中的函数的类型参数。

注:我已经接受了这个答案,因为它消除了原始问题的例外,但这只是因为我想要的解决方案不存在。

相关问题