Class.getDeclaringClass
和Class.getEnclosingClass
有哪些情况下可能会得到不同的结果?
我曾认为这可能与外部类的子类实例化未声明为静态的内部类有关,但我无法通过这种方式得到不同的结果:
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
MemberInnerClass
的类X
,以我的例子术语来说。我还有很多X
的子类。我曾经需要确定给定MemberInnerClass
实例所涉及的X
子类,现在我已经解决了这个问题,但是对于声明与封闭类之间的区别感到好奇。 - OpenSauce