我正在尝试添加 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.
当我删除泛型时,它会起作用。
请帮忙。
答案 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
那么这意味着你对此一无所知在模板内部,如果你对它没有任何了解,你会在模板中用它做什么?
希望这有帮助!