Playframework Play framework 2.x泛型

Playframework Play framework 2.x泛型,playframework,template-engine,Playframework,Template Engine,我有以下等级: public class AbstractModel { 以及从上述类继承的类: public class Model1 extends AbstractModel { 及 现在,我想将上面的一个类实现util.List传输到框架模板引擎(来自Controller),但我不想知道列表中到底是哪个类。诸如此类: public static Result reloadTableData() { List<Model1> models = new ArrayLi

我有以下等级:

public class AbstractModel {
以及从上述类继承的类:

public class Model1 extends AbstractModel {

现在,我想将上面的一个类实现util.List传输到框架模板引擎(来自Controller),但我不想知道列表中到底是哪个类。诸如此类:

public static Result reloadTableData() {
    List<Model1> models = new ArrayList<Model1>();
    return ok(myTemplate.render(models));
}
这个构造将返回错误,我不知道如何编写正确的语法

同样在myTemplate中,我想区分这些类型(Model1和Model2) 我也不知道这个语法应该是什么样子:(


有人有这种问题吗?每个建议都会很满意。

这里的问题是
java.util.List
不像Scala的
List[T]那样是协变的
。这意味着,即使
Model1
扩展了
AbstractModel
列表
不是
列表
。因此,当它需要
列表时,不能将
列表
传递给
渲染

我所知道的解决这个问题的唯一方法是有点丑陋。Java数组是协变的,因此您可以将
列表
转换为
数组
,这样就可以了

public static Result reloadTableData() {
    List<Model1> models = new ArrayList<Model1>();
    Model1[] arr = models.toArray(new Model1[models.size()]);
    return ok(myTemplate.render(models));
}
公共静态结果重载TableData(){
列表模型=新的ArrayList();
Model1[]arr=models.toArray(新Model1[models.size()]);
返回ok(myTemplate.render(models));
}
示例视图:

@(models: Array[AbstractModel])

@for(model <- models) {
    @if(model.isInstanceOf[Model1]) {
        I'm an instance of Model1
    }
    @if(model.isInstanceOf[Model2]) {
        I'm an instance of Model2
    }
}
@(模型:数组[AbstractModel])

@for(模型类型不匹配;找到:java.util.List[models.AbstractModel]必需:java.util.List[models.User]当我从模板中删除所有调用时,我得到:错误:不兼容类型:列表无法转换为列表它不起作用错误说明:不兼容类型:列表在我将列表替换为表时无法转换为列表错误保持不变,但Model1出现调用问题[]Table在我看来,在template中,我应该使用与我提供的使用play java编译的示例相似的东西。我不认为play templates支持您想要的java泛型。使用play scala这可能会起作用,但除了转换为数组之外,我看不到使用java的方法。
public static Result reloadTableData() {
    List<Model1> models = new ArrayList<Model1>();
    Model1[] arr = models.toArray(new Model1[models.size()]);
    return ok(myTemplate.render(models));
}
@(models: Array[AbstractModel])

@for(model <- models) {
    @if(model.isInstanceOf[Model1]) {
        I'm an instance of Model1
    }
    @if(model.isInstanceOf[Model2]) {
        I'm an instance of Model2
    }
}