2015-07-12 84 views
0

我所試圖做的是這樣的:呼叫方法在主類的實例化對象

public class MainClass { 
    private UIController uIController; 

    MainClass() { 
     uIController = new UIController(); 
    } 

    public void MethodIWantToCall() { 
     //Do Something 
    } 
} 

UIController類的例子:

public class UIController { 
    UIController() { 
     //Call a method in MainClass here, for example MethodIWantToCall() 
    } 

    public void MethodA { 
     //Call a method in MainClass here, for example MethodIWantToCall() 
    } 
} 

我想要做的是,UIController傳遞給MainClass命令,在用戶與UI交互時調用它的方法或將值返回給MainClass。

+0

聽起來很奇怪。看起來像我的代表模式。 –

+3

不相關,但是:'public void MethodA {'''public void MethodA(){' – beresfordt

+0

MainClass是否擴展任何東西,或者完全按照您在示例代碼中所示的方式進行擴展? – Squonk

回答

2

你需要一個MainClass實例的引用傳遞給您的UIController實例,例如:

public class UIController { 
    private final MainClass mainClass; 
    UIController (final MainClass mainClass) { 
     this.mainClass = mainClass; 
     //Call a method in MainClass here, for example MethodIWantToCall() 
     this.mainClass.MethodIWantToCall(); 
    } 

    public void MethodA() { 
     //Call a method in MainClass here, for example MethodIWantToCall() 
     this.mainClass.MethodIWantToCall();    
    } 
} 

然後

uIController = new UIController(this); 

PS:在Java方法應該與小寫開頭。

-1

可以使實例字段:

public class MainClass { 
    public static MainClass instance; 
    public MainClass() { 
     instance=this; 
    } 
    public void method() {} 
} 

然後,調用:MainClass.instance.method();或:

public class MainClass { 
    public MainClass() { 
     new AnotherClass(this); 
    } 
    public void method() {} 
} 
public class AnotherClass { 
    public AnotherClass(MainClass main) { 
     main.method(); 
    } 
} 
+0

錯誤的單例實現:1)公共構造函數和2)公共非最終實例字段。如果構造函數被調用兩次會發生什麼?如果另一個類修改'instance'會發生什麼? – m0skit0

+0

m0skit0爲什麼另一個類會修改實例?它應該只能通過MainClass進行修改。 – barwnikk

+0

問題是爲什麼它不會在「公開」時修改它? https://en.wikipedia.org/wiki/Encapsulation_%28computer_programming%29 – m0skit0