Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/375.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java:如何在从不同类实例化的不同对象中调用同名方法?_Java_Android_Class_Instance_Instantiation - Fatal编程技术网

Java:如何在从不同类实例化的不同对象中调用同名方法?

Java:如何在从不同类实例化的不同对象中调用同名方法?,java,android,class,instance,instantiation,Java,Android,Class,Instance,Instantiation,我认为我的问题不是很清楚:)这是我的问题(更详细): 我有几个对象(比如objA、objB、objC等等),它们是来自不同类(分别是ClassA、ClassB、ClassC等)的实例 这些对象A,B,C,…,调用同一个对象(我们称之为jsonConnector,jsonConnector类的实例),然后我希望这个jsonConnector调用创建它的对象的updateUI()方法 我的ClassX(ClassA、ClassB等)类中的代码: 我的JsonConnector类的构造函数: priv

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

我有几个对象(比如objA、objB、objC等等),它们是来自不同类(分别是ClassA、ClassB、ClassC等)的实例

这些对象A,B,C,…,调用同一个对象(我们称之为jsonConnector,jsonConnector类的实例),然后我希望这个jsonConnector调用创建它的对象的updateUI()方法

我的ClassX(ClassA、ClassB等)类中的代码:

我的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条“如果”的语句

有人知道我能做什么吗


谢谢

我想你可以编写一个界面

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() ;

您可以创建一个
接口
,其中包含
updateUI
方法

确保所有这些对象
实现
接口

然后使用
MyInterface
而不是
Object
将它们传递给
JsonConnector

private CalleeInterface callingObject;

public JsonConnector(CalleeInterface aCallingObject) {

  callingObject = aCallingObject
}

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

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

我还没有完全尝试过你的解决方案,但它似乎有效。不过,我将使用“接口”,因为它似乎是一个更标准的解决方案。谢谢。谢谢你的回答!它就像一个符咒。如果我想访问一个int变量,它在不同的classA,classB,…对象中有不同的值,那该怎么办?例如,如果我想获取updater.classIntValue?(classIntValue是类A、B的一个实例int变量。)谢谢。@Regis_AG您也应该能够将该方法添加到接口中<代码>更新程序。getImportantInteger()
callingObject.getClass().getMethod("updateUI").invoke(callingObject);