freemarker:将“Interface”对象转换为真正的concret类

时间:2016-12-12 11:02:16

标签: freemarker

我迭代到IColonne对象列表。但是我需要投入到混凝土课程以获得具体的归属。我的列表有“Colonne”和“ColonneGroup”对象。

IColonne界面:

public interface IColonne {
    String getFtlName();
    int getWidthPx(final int tableSize);
}

Colonne具体课程:

public class Colonne implements IColonne {
    ....
}

ColonneGroup concret课程:

public class ColonneGroup implements IColonne {
    private List<String> texts;
}

我需要访问“文本”attribut。但我“只有”IColonne。所以我需要施放到ColonneGroup。我怎么能这样做?

1 个答案:

答案 0 :(得分:0)

我想您需要从FreeMarker模板访问texts。由于FTL是动态类型的,因此您无需进行转换。如果对象具有公共getTexts()方法,则只能访问该成员。它有它(并且它也是非空的)你可以测试colonne.texts??,或者你可以使用!运算符给它一个默认值。所以它可能是这样的:

<#list colonnes as colonne>
  ...
  <#if colonne.texts??>
    Do something with colonne.texts
  </#if>
  ...
  <#!-- Or if you would #list the texts anyway: -->
  <#list colonne.texts!>
     <p>We have some texts here:
     <ul>
       <#items as text>
         <li>${text}</li>
       </#items>
     </ul>
  </#list>
  ...
</#list>