2017-05-31 32 views
-2

当我通过反射搜索方法时,它显示新提供的方法。但我不知道如何调用这种方法,如果有人知道如何去做,请告诉我。java匿名类作为参数与新方法

//some pakage 
pakage xyz; 

class A { 
    // a simple method of class A 
    public void aMethod() { 
     //simple print statement 
     System.out.println("A class method"); 
    } 
} 

class B { 
    // a method of class B that takes A types as an argument 
    public void bMethod(A arg) { 
     Class c = Class.forName("xyz.A"); 

     Method[] methods = c.getDeclaredMethods(); 
     for (Method method : methods) { 
      System.out.println(method.getName()); 
     } 
    } 
} 

class Test { 
    public static void main(String[] args) { 
     B bObj = new B(); 
     bObj.bMethod(new A() { 
      public void anotherMethod() { 
       System.out.println("another method"); 
      } 
     }); 
    } 
} 
+0

请先格式化您的代码。 – weaver

+0

我格式化了你的问题和你的代码,并修复了明显的错误。下一次,我会冷静下来。在写问题时要小心。 –

+1

你也应该在更高层次上解释你想要达到的目标。你为什么使用反射?你为什么使用这样的匿名类和其他方法无法调用。但无论如何,如果你想找到这个额外的方法,你需要获得'arg'类的方法。不是A. –

回答

0

您可以使用反射来调用特定对象上的方法:

public void invokeSomeMethodOnA(A arg, String methodName) { 
    Method method = arg.getClass().getDeclaredMethod(methodName); 

    //To invoke the method: 
    method.invoke(arg, parameters here); 
} 
+0

method.invoke(obj,这里的参数);它是参数中的同一个对象(obj)吗? – Ankur

+0

是的,该方法将在与参数相同的对象上调用。 –

+0

好的,谢谢你krzysztof-cichocki – Ankur

0

我想也许这就是你想要的。

package xyz; 

import java.lang.reflect.Method; 

class A { 
    // a simple method of class A 
    public void aMethod() { 
     //simple print statement 
     System.out.println("A class method"); 
    } 
} 

class B { 
    // a method of class B that takes A types as an argument 
    public void bMethod(A arg) throws Exception { 
     Class c = Class.forName(arg.getClass().getName()); 

     Method[] methods = c.getDeclaredMethods(); 
     for (Method method : methods) { 
      System.out.println(method.getName()); 
      method.invoke(arg); 
     } 
    } 
} 

class Test { 
    public static void main(String[] args) throws Exception { 
     B bObj = new B(); 
     bObj.bMethod(new A() { 
      public void anotherMethod() { 
       System.out.println("another method"); 
      } 
     }); 
    } 
}