2015-01-09 212 views
0

我正在開發一個java程序,我的問題是我想寫一個通用方法來調用 特定方法的幾個類,並且該類是未知的。在java中實現接口

例如在正常使用中我寫這段代碼爲RootLayoutController類,它的工作原理:

RootLayoutController controller = loader.getController(); 
     controller.setMainApp(this) 

但問題是,我有寫了很多方法來調用它們! 所以我創建了PageController接口(與setMainApp()裏面)並在RootLayoutController和其他類中實現它;然後改變了這個方法:

Object controller = loader.getController(); 
     ((PageController) controller).setMainApp(this); 

但它拋出classcastexception和我不太瞭解接口,所以我不能調試它! 非常感謝

+1

爲什麼你找回一個對象時,你知道你需要實現'PageController'接口的東西? – Makoto 2015-01-09 20:15:49

+0

很明顯,'loader.getController()'沒有返回'PageController'。但是你還沒有告訴我們它會返回什麼,所以我不能再多說了。 – dcsohl 2015-01-09 20:16:58

+0

它返回一個類,它可能是RootLayoutController或其他類似PersonOverviewController的東西! – 2015-01-09 20:19:34

回答

0

下的Java 8,文件PageController.java(接口):

package test; 

@FunctionalInterface 
public interface PageController { 
    void setMainApp(PageController c); 
} 

文件PageControllerImpl.java(測試執行):

package test; 

public class PageControllerImpl implements PageController { 

    @Override 
    public void setMainApp(PageController c) { 
     // TODO your implemenrtation 

    } 

    public static void main(String[] args) { 
     PageController testController = new PageControllerImpl(); 
     testController.setMainApp(testController);   
    } 

} 
1

如果你有一個接口PageController,你可以做(​​因爲RootLayoutControllerPageController):

PageController controller = loader.getController(); 

,然後,沒有必要投:

controller.setMainApp(this); 

這就是接口存在的原因。

+0

也就是說,如果'getController'實際上沒有返回'Object'。 – Makoto 2015-01-09 20:20:45

+0

工作!非常感謝你,我知道我必須使用接口,因爲所有這些類都在做同樣的動作,但我對語法知之甚少! – 2015-01-09 20:27:31