在学习java反射时遇到这个词"立即封闭构造方法",一直想不能是什么意思,哪位能指点一下,比如Class的getEnclosingConstructor方法,下面是jdk给的说明:getEnclosingConstructor
public Constructor<?> getEnclosingConstructor()如果该 Class 对象表示构造方法中的一个本地或匿名类,则返回 Constructor 对象,它表示底层类的立即封闭构造方法。否则返回 null。特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回 null。 返回:
如果该类是本地或匿名类,则返回底层类的立即封闭构造方法;否则返回 null。
从以下版本开始:
1.5
public Constructor<?> getEnclosingConstructor()如果该 Class 对象表示构造方法中的一个本地或匿名类,则返回 Constructor 对象,它表示底层类的立即封闭构造方法。否则返回 null。特别地,如果底层类是由一个类型声明、实例初始值设定项或静态初始值设定项立即封闭的本地或匿名类,则此方法返回 null。 返回:
如果该类是本地或匿名类,则返回底层类的立即封闭构造方法;否则返回 null。
从以下版本开始:
1.5
immediately翻译成"立即"了,可以按“直接”理解一下。
public Test(){
class LocalInner{
};//内部类在构造方法中
Class cl = LocalInner.class;
System.out.println(cl.getEnclosingConstructor());//得到封闭该内部类的构造方法
}
public static void main(String[] args){
new Test();
}
}
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 所输出的信息。