PlayFramework scala模板泛型类型导致错误:']'预期但是找到了eof。和错误:预期的标识符,但$ XMLSTART $<发现

时间:2015-07-23 08:31:32

标签: java scala templates generics playframework-2.2

我正在尝试添加 scala 模板来自 java 的一些通用变量,但遗憾的是到目前为止没有运气。

不是scala专家。我只是每天 Java Developer

我选择Play,因为在Java世界中似乎是一个简单的框架。 现在我对这个scala模板有问题。

我已经在scala tutorial创建了我要添加plus字符来定义扩展名。

这是我的代码:

实体类:

public class Insurance<T> {
    // some code
}

列表声明(此处未声明类型参数):

List<Entity> entities = new LinkedList<Entity>();

将参数传递给视图模板渲染方法:

return ok(views.html.Index.render(entities));

在Scala View图层上:

@(entities: List[models.Entity[+T]])

但我收到了错误:

[error] /home/app/views/Index.scala.html:0: identifier expected but $XMLSTART$< found.
[error] /home/app/views/Index.scala.html:150: ']' expected but eof found.

当我删除泛型时,它会起作用。

请帮忙。

1 个答案:

答案 0 :(得分:2)

模板实际上就像一个方法,就像一个方法,参数列表(entities: List[models.Entity[+T]])不再比public Something myTemplate(entities: List[models.Entity[+T]])更有效,没有任何地方可以放置一个类型参数因此,对于方法调用,您必须提供具体类型而不是T

此外,在Scala中,类型参数(+)的方差未在调用站点指定,而是在声明中指定,因此即使您可以在中定义类型参数,它也无效。方法签名。

你可以做的就是说它可以是任何东西,使用models.Entity[Any]或可能只是你不关心使用models.Entity[_](基本上像Java中的models.Entity<?>

作为旁注,似乎可能是你应该考虑一次或两次额外的事情,因为如果你可以使用一个完全未绑定的类型参数T那么这意味着你对此一无所知在模板内部,如果你对它没有任何了解,你会在模板中用它做什么?

希望这有帮助!