2

我认为我的问题不是很清楚:) 这是我的问题(更详细):

我有几个对象(比如说 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...

但我不想写 100 条“else if”语句!

有人知道我该怎么做吗?

谢谢 !!!

4

3 回答 3

4

我认为您可以对接口进行编程。

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

你可以控制 JsonConnector 吗?如果是这样,注入对象引用:

public JsonConnector(GuiUpdate updater)

此外,这意味着您可以在后续方法、多态和抽象中简单地执行以下操作:

  updater.UpdateUI() ;
于 2013-05-01T13:34:56.867 回答
1

您可以创建一个interface,其中包含该updateUI方法。

确保所有implement那些interface.

然后将它们传递给JsonConnectorusingMyInterface而不是Object

private CalleeInterface callingObject;

public JsonConnector(CalleeInterface aCallingObject) {

  callingObject = aCallingObject
}
于 2013-05-01T13:35:34.913 回答
1

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

callingObject.getClass().getMethod("updateUI").invoke(callingObject);
于 2013-05-01T13:38:19.467 回答