Scala - 未绑定通配符异常(Play Framework 2.3 模板)

Scala - unbound wildcard exception (Play Framework 2.3 Template)

我正在使用 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% 确定。

我可以通过完全删除 doSomething 方法来解决问题...

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

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

@import some.namespace.MyObject

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

但我对解决方案的满意度大约为 10%...它至少可以工作,但感觉非常受限,因为我无法委托方法来帮助保持代码的可维护性。从评论来看,问题似乎是 Twirl 中的一个限制,不允许在视图中为函数使用类型参数。

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