17
有没有任何情况下Class.getDeclaringClass
可以给出与Class.getEnclosingClass
不同的结果?封闭类vs申报类
我想这可能是与外部类实例化,这不是声明为静态内部类的子类的事,但我没能得到一个差方式:
public class Main {
private static class StaticInnerClass {
}
private class MemberInnerClass {
}
private static class ChildClass extends Main {
}
public MemberInnerClass getMemberInnerClassInstance() {
return new MemberInnerClass();
}
public static void main(String[] args) {
System.out.println(StaticInnerClass.class.getDeclaringClass());
System.out.println(StaticInnerClass.class.getEnclosingClass());
System.out.println(MemberInnerClass.class.getDeclaringClass());
System.out.println(MemberInnerClass.class.getEnclosingClass());
System.out.println(new ChildClass().getMemberInnerClassInstance().getClass().getEnclosingClass());
System.out.println(new ChildClass().getMemberInnerClassInstance().getClass().getDeclaringClass());
}
}
输出:
class Main
class Main
class Main
class Main
class Main
class Main
你是什么目的? – MartinL 2012-02-20 11:11:54
@MartinL:我有一个类'X',它声明了一个'MemberInnerClass',在我的例子中,我也有大量的'X'的子类, X'参与了'MemberInnerClass'的给定实例;我工作现在编辑一下,但对宣布封闭课程感到好奇。 – OpenSauce 2012-02-20 12:16:02