java匿名类作为新方法的参数

java匿名类作为新方法的参数,java,anonymous-class,Java,Anonymous Class,当我通过反射搜索方法时,它显示了新提供的方法。但是我不知道如何调用这个方法,如果有人知道怎么做,请告诉我 //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 {

当我通过反射搜索方法时,它显示了新提供的方法。但是我不知道如何调用这个方法,如果有人知道怎么做,请告诉我

//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");
            }
        });
    }
}

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

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

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

我想也许这就是你想要的

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");
            }
        });
    }
}

请先格式化您的代码。我格式化了您的问题和代码,并修复了明显的错误。下次,我就投反对票。写问题时要小心。你还应该在更高的层次上解释你想要达到的目标。为什么要使用反射?为什么要使用这样的匿名类和其他没有人可以调用的方法呢。但是无论如何,如果您想找到这个额外的方法,您需要获得
arg
类的方法。不是A.Thank you method.invoke的方法(obj,这里是参数);它是参数中的同一对象(obj)吗?是的,该方法将在参数中的同一对象上调用。好的,谢谢krzysztof Cichoki