2015-08-12 3 views
1

я следующие классы:Доступ методы подкласса внутри шаблонов 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;} 
} 

Я создал 2 объекта:

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 не знает, чтобы загрузить в методах шаблона, унаследованных от супер классов. Это правда? Или я здесь что-то не хватает.

ответ

0

Я общался с этой проблемой, и я придумал решение. Чтобы сделать его работу я сделал следующие изменения:

  1. сделать ей свойство защищенного вместо частной:

    protected String s; 
    
  2. сделать-акцессоры абстрактную в базовом классе А:

    public abstract void setS(String s); 
    public abstract String getS(); 
    
  3. Переопределение абстрактные методы в суб класса В.

Смежные вопросы