2013-05-01 107 views
2

我認爲我的問題不是很清楚:)這裏是我的問題(更詳細):Java:如何從不同類實例化的不同對象中調用具有相同名稱的方法?

我有幾個對象(可以說objA,objB,objC等)不同的類(可以分別說ClassA,ClassB,ClassC ...)。這些對象A,B,C,...調用同一個對象(我們稱之爲jsonConnector,JsonConnector類的實例),然後我希望這個jsonConnector調用它的對象的updateUI()方法已經被創造了。

代碼在我ClassX(ClassA的,ClassB的,等...)類:

JsonConnector jsonConnector = new JsonConnector(this); 

構造我JsonConnector類:

private Object callingObject; 

public JsonConnector(Object aCallingObject) { 

callingObject = aCallingObject 
} 

某處在我JsonConnector類,我想要做的:

aCallingObject.updateUI(); 

但我有一個編譯錯誤「方法updateUI()未定義類型對象」

我可以這樣做:

String callingClassName = callingObject.getClass().getSimpleName(); 

if(callingClassName == "ClassA") 
{ 
((ClassA)aCallingObject).updateUI(); 
} 
else if(callingClassName == "ClassB") 
{ 
((ClassB)aCallingObject).updateUI(); 
} 
else if... 

但我不想要 '的if else' 語句來寫100!

有人知道我該怎麼辦?

謝謝!

回答

4

我想你可以編程到一個接口。

public interface GuiUpdate 
{ 
    void UpdateUI() ; 
} 
//do the same for classes that updates a gui. 
public class ClassA implements GuiUpdate 

您是否擁有對JsonConnector的控制權?如果是這樣,注射的對象引用:

​​

要增加,這意味着你可以簡單地做其最好在隨後的方法,多形性和抽象如下:

updater.UpdateUI() ; 
+0

感謝您的回答!它像一個魅力。如果我想要訪問一個在不同classA,classB,...對象中具有不同值的int變量,那該怎麼辦?例如,如果我想獲得updater.classIntValue? (classIntValue是類A,B ...的實例int變量)謝謝。 – 2013-05-03 13:41:42

+1

@Regis_AG您應該可以將該方法添加到您的界面中。'updater.getImportantInteger()' – 2013-05-03 18:11:52

1

您可以創建一個interface ,其中包含updateUI方法。

確保所有這些對象implementinterface

然後將它們傳遞到使用MyInterface代替ObjectJsonConnector

private CalleeInterface callingObject; 

public JsonConnector(CalleeInterface aCallingObject) { 

    callingObject = aCallingObject 
} 
1

您可以使用反射。但如果您有其他解決方案,請不要使用它。

callingObject.getClass().getMethod("updateUI").invoke(callingObject); 
+0

我還沒有完全嘗試過您的解決方案,但似乎可行。儘管如此,我仍然會使用「接口」,因爲它似乎是更標準的解決方案。謝謝。 – 2013-05-01 14:27:53

相關問題