2013-05-01 581 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

相关问题