【发布时间】:2012-03-10 17:32:55
【问题描述】:
在任何情况下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
【问题讨论】:
-
@MartinL:我有一个类
X,它声明了一个MemberInnerClass,用我的例子的术语来说。我还有大量X的子类。对于给定的MemberInnerClass实例,我可能需要确定X的哪个子类;我现在已经解决了这个问题,但对声明与封闭类感到好奇。
标签: java reflection