【发布时间】:2017-07-04 18:54:53
【问题描述】:
假设我有对象 X 和对象 B。X 是一个随机类的对象,它反过来创建 B,并将自身传递给作为变量存储在对象 B 中。
现在对象 B,想在对象 X 中运行一个方法,却不知道它是什么类。
是否可以在任何对象中调用方法,如果具有该名称的方法存在,则它运行,如果不存在,则不运行。我假设一些 try/catch 可以解决该部分。
但是可以说我有这样的东西:
public class ObjectB {
public Object parentX;
public ObjectB(Object x) {
parentX = x;
}
public void anyMethod() {
x.runMyMethod();
}
}
在我使用的另一个程序中,这可以通过接口实现,因此我认为 Java 也可以。但是,我似乎找不到设置它的方法。那么,如果是上述情况,它将如何设置,以便 ObjectB 可以在我的程序中的所有类上调用该方法,如果这是我想要的?
【问题讨论】:
-
如果您想调用该方法,
x必须是实现该接口的类的实例。 (你的意思是parentX?) -
不,唯一的方法是使用反射,但反射在大多数情况下不是正确的答案。您可能应该通过修复您的设计来做到这一点。但是,如果不知道自己想要达到什么,在更高的层次上,就很难回答。
-
使用接口,而不是
Object作为x和parentX的类型。 -
其他一些语言是解释型的(或部分解释型的),也就是说当你在一个对象上调用一个方法时,程序可以在调用发生时搜索该对象,看看该对象是否定义了一个方法用那个名字。 Java 不是这样的。它想在编译时知道对象是否有需要的方法。