2014-12-06 57 views
1
@Override 
void func(Object obj){ 
    obj.foo(); // <---- Is it possible to call foo() method? 
       // Suppose I can guarantee always passing an object which has foo() method 
} 

更多信息,因为我重写的方法我不能在功能更改为类似获得来自和对象类型的对象

void func(SomeClass obj) 

+2

你总是可以投。但需要这样做的话表明您的设计可能存在缺陷。 – 2014-12-06 19:51:38

+0

这有点味道。你压倒一切是什么?你为什么不能改变它? – 2014-12-06 19:52:02

+0

@Spider因为这是一个方法会被库中的其他类自动调用。 – Tim 2014-12-06 19:56:10

回答

1

这将导致语法错误,因为Object未定义方法foo()。但是,如果你确定你传递参数其实是一个SomeClass例如,你可以投的说法:

@Override 
void func(Object obj){ 
    ((SomeClass) obj).foo(); 
} 
0

两种方法 -

i)具有“}这种”检查,然后下调并调用Mureinik提到的方法。

II)反射救援 -

  Method method = obj.getClass().getMethod("foo",new Class[]{}); 
      method.invoke(obj, null);