java PlayFramework scala模板泛型类型导致错误:“]”,但找到eof。和错误:需要标识符,但找到$XMLSTART$<
我正试图添加到scala模板中一些来自java的通用变量,但不幸的是,到目前为止运气不佳
我不是scala专家。我只是每日Java开发者
我选择了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视图层上:
@(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 楼答案
模板实际上就像一个方法,就像一个方法。参数列表
(entities: List[models.Entity[+T]])
比public Something myTemplate(entities: List[models.Entity[+T]])
更有效,只是没有任何地方可以为方法调用放置类型参数,因此必须提供一个具体的类型,而不是T
此外,在Scala中,类型参数的方差(the
+
)不是在调用站点指定的,而是在声明中指定的,因此即使可以在方法签名中定义类型参数,它也无效你可能只需要说它可以是任何东西,使用
models.Entity[Any]
,或者你不在乎使用models.Entity[_]
(基本上就像Java中的models.Entity<?>
)作为旁注,这似乎是你应该额外考虑一两次的事情,因为如果你可以使用一个完全未绑定的类型参数
T
,那么这意味着你在模板内部对它一无所知,如果你对它一无所知,你会在模板中对它做什么希望这有帮助