在Velocity模板中访问子类的方法

时间:2015-08-12 13:19:25

标签: java velocity

我有以下课程:

public abstract class A{
    private String s;
    public void setS(String s){
       this.s=s;
    }
    public String getS(){
       return this.s;
    }
}
public class B extends A{
    private String s2;
    public void setS2(String s2){
       this.s2=s2;
    }
    public String getS2(){
       return this.s2;
    }
}
public class C{
    private A a;
    public setA(A a){this.a = a;}
    public getA(){return this.a;}
}

我创建了两个对象:

B b = new B();
b.setS("some string");
C c = new C();
c.setA(b);

当我将对象加载到Velocity模板中时:

My Template
$c.a.getS()

我得到以下输出:

My Template
$c.a.getS()

而不是它应该是:

My Template
some string

似乎Velocity不知道加载从超类继承的模板方法。 这是真的?或者我在这里遗漏了一些东西。

1 个答案:

答案 0 :(得分:0)

我一直在玩这个问题,我想出了一个解决方案。 为了使它工作,我做了以下更改:

  1. 使s属性受保护而不是私有:

    protected String s;
    
  2. 在基类A中创建getter和setter摘要:

    public abstract void setS(String s);
    public abstract String getS();
    
  3. 覆盖子类B中的抽象方法。