Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何从匿名类访问私有方法?_Java_Object_Reflection_Methods - Fatal编程技术网

Java 如何从匿名类访问私有方法?

Java 如何从匿名类访问私有方法?,java,object,reflection,methods,Java,Object,Reflection,Methods,假设我有课: MyObject b = new MyObject(){ private void method(){} } 是否可以通过反射获取方法()?对于toString,我可以写: MyObject.class.getMethod("toString"); 但是对于新创建的私有方法呢?您必须在b引用上调用,以获取匿名类,在该类中声明该方法MyObject.class将为您提供class,这可能不是您想要的 然后使用获取私有方法: Method method = b.getCla

假设我有课:

MyObject b = new MyObject(){
    private void method(){}
}
是否可以通过反射获取方法()?对于toString,我可以写:

MyObject.class.getMethod("toString");
但是对于新创建的私有方法呢?

您必须在
b
引用上调用,以获取匿名类,在该类中声明该方法
MyObject.class
将为您提供
class
,这可能不是您想要的

然后使用获取私有方法:

Method method = b.getClass().getDeclaredMethod("method");
method.setAccessible(true);
method.invoke()
您可以将其用于:

Method method = b.getClass().getDeclaredMethod("method");
这里
b.getClass()
将返回编译器为匿名内部类生成的类

然而,我很难想象在什么情况下这是一个好办法

请注意,如果使用本地命名类,则甚至不需要使用反射来调用该方法:

public class Test {
    public static void main(String[] args) {
        class Foo {
            private void doSomething() {
                System.out.println("Yes!");
            }
        };

        Foo foo = new Foo();
        foo.doSomething();
    }
}
如果你能给我们提供更多关于你为什么要这样做的背景,我们可能会在寻找最佳解决方案方面提供更多帮助