2013-11-21 38 views
0

我的工作我的抽象SWT MVC控制器菜鳥級:Java類的字段動態轉換

這裏是代碼的片段:

public abstract class Controller { 
    protected View view; 

    public Controller(View v) { 
     view = v; 
    } 

    protected void render() { 
     data(); 
     view.setData(data); 
     view.render(); 
     listeners(); 
     if (display) 
      view.open(); 
    } 
    protected void data() {} 

    protected void listeners() {} 
} 

AboutController.java(represends新窗口):

public class AboutController extends Controller { 

    public AboutController() { 
     super(new AboutView()); 
     super.render(); 
    } 
} 

我遇到了一個障礙:在抽象控制器中我有一個字段View視圖,但它的子類可以表示一個View的子類(就像AboutView一樣擴展了View),而且我無法訪問non-查看字段和方法ods(在AboutView中是新的)。

我可以在它的子類中說明該類的字段視圖嗎?

我知道這很可能是我班級架構中的一個錯誤,但我無法弄清楚該怎麼做。

回答

0

最好的/最習慣的方式是使用Generics

public abstract class Controller<T extends View> { 
    protected T view; 

    public Controller(T v) { 
     view = v; 
    } 

    protected void render() { 
     data(); 
     view.setData(data); 
     view.render(); 
     listeners(); 
     if (display) 
      view.open(); 
    } 
    protected void data() {} 

    protected void listeners() {} 
} 

public class AboutController extends Controller<AboutView> { 

    public AboutController() { 
     super(new AboutView()); 
     super.render(); 
    } 

    public void doSomething() { 
     view.getAboutStuff(); 
    } 
} 
+0

令人驚訝的是,如此顯而易見的解決方案如何脫離頭腦。非常感謝你! – ovnia