有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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) 个答案

  1. # 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,那么这意味着你在模板内部对它一无所知,如果你对它一无所知,你会在模板中对它做什么

    希望这有帮助