考虑以下课程
Class A{
public void m1(){
System.out.println("test in A.m1()");
}
public void m2(){
//do something a
}
}
Class B{
public void m1(){
//do something b
}
public void m2(){
//do something b
}
}
Class C{
public void m1(){
//do something c
}
public void m2(){
//do something c
}
}
Class T{
public void m3(Object obj1){
obj1.m1();
}
public void m4(Object obj1){
A a=new A();
m3(a);
}
}
所以现在我的问题是,有什么方法可以将一个开放对象发送到一个方法,该方法将检测它是什么类型的对象并调用该对象类的方法。在这个例子中,我希望看到输出:"test in A.m1()"
答案 0 :(得分:3)
您可以使用Java Reflection API查询任意对象,看它是否有一个名为m1
或m2
的方法然后调用它。但这非常难看。
有什么东西阻止你使用界面吗?下面的示例(其中" ..."表示您将特定实现的位置):
interface MyMethods {
public void m1();
public void m2();
}
class A implements MyMethods {
public void m1() { ... }
public void m2() { ... }
}
class B implements MyMethods {
...
}
class C implements MyMethods {
...
}
class T {
public void m3(MyMethods obj1) {
obj1.m1();
}
public void m4(Object obj1) {
// Call m3 three times with different object instance types...
A a = new A();
m3(a);
B b = new B();
m3(b);
C c = new C();
m3(c);
}
}