在学习java反射时遇到这个词"立即封闭构造方法",一直想不能是什么意思,哪位能指点一下,比如Class的getEnclosingConstructor方法,下面是jdk给的说明:getEnclosingConstructor
public Constructor<?> getEnclosingConstructor()如果该 Class 对象表示构造方法中的一个本地或匿名类,则返回 Constructor 对象,它表示底层类的立即封闭构造方法。否则返回 null。特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回 null。 返回:
如果该类是本地或匿名类,则返回底层类的立即封闭构造方法;否则返回 null。
从以下版本开始: 
1.5 

解决方案 »

  1.   

     the immediately enclosing class 
    immediately翻译成"立即"了,可以按“直接”理解一下。
      

  2.   

    public class Test {
    public Test(){
    class LocalInner{

    };//内部类在构造方法中
    Class cl = LocalInner.class;
    System.out.println(cl.getEnclosingConstructor());//得到封闭该内部类的构造方法
    }
    public static void main(String[] args){
    new Test();
    }
    }
      

  3.   

    执行一下这段代码就能明白了:public class ReflectionTest {    public ReflectionTest(int a) {
            class ConstructorClass {
            }        printInfo(ConstructorClass.class, "ReflectionTest$1ConstructorClass objects");
        }    public static void main(String[] args) {
            ReflectionTest t = new ReflectionTest(5);
    //        ReflectionTest.A a = t.new A();
    //        ReflectionTest.A.B b = a.new B();
    //        ReflectionTest.A.B.C c = b.new C();        printInfo(ReflectionTest.class, "ReflectionTest object");
            printInfo(ReflectionTest.A.class, "ReflectionTest$A object");
            printInfo(ReflectionTest.A.B.class, "ReflectionTest$A$B object");
            printInfo(ReflectionTest.A.B.C.class, "ReflectionTest$A$B$C object");        t.test();
        }    public void test() {
            final class MethodClass {
            }        printInfo(MethodClass.class, "ReflectionTest$1MethodClass object");
        }    private class A {        private class B {            private class C{
                }
            }
        }    private static void printInfo(Class<?> clazz, String info) {
            System.out.println("============== " + info);
            System.out.println("           class name: " + clazz.getClass());
            System.out.println(" enclosing class name: " + clazz.getClass().getEnclosingClass());
            System.out.println("     enclosing method: " + clazz.getClass().getEnclosingMethod());
            System.out.println("enclosing constructor: " + clazz.getClass().getEnclosingConstructor());
            System.out.println();
        }
    }立即封闭,表示的意思是某个内部类被封闭于何处。说白一点就是这个内部类被哪个类,方法或者构造“关”在那里。如果某个内部类是放在类中的,那么 getEnclosingClass 获得的就是这个内部类所在类的类。
    如果某个内部类是放在方法中的,那么 getEnclosingClass 获得的就是这个内部类所在方法的类,而 getEnclosingMethod 获得的是这个内部类所在方法。
    同理,getEnclosingConstructor 获得的就是这个内部类位于哪个构造方法之中,如上面代码中ConstructorClass 所输出的信息。