确定成员类是嵌套还是内部?

时间:2014-07-24 11:15:38

标签: java reflection

假设我有一个包含来自成员类的类,其中一些嵌套(静态)和一些内部(非静态):

class Foo {
    static class A {}
    class B {}
    static class C {}
}

我想获得Foo的所有嵌套成员类,即AC,但不是B。这甚至可能吗?我知道如何列出所有成员类(使用Foo.class.getDesclaredClasses()),我在isLocalClass()上看到isMemberClass()isAnonymousClass()java.lang.Class等方法,但我不知道{39}看到isNested()isInner()之类的内容。

1 个答案:

答案 0 :(得分:3)

您可以使用Modifier#isStatic(int mod)如果整数参数包含静态修饰符则返回true,否则返回false。)以了解内部类是否为静态。

像这样:

public class Demo {
public static void main(String[] args) {
    Class foo = Foo.class;
    Class[] declaredClasses = foo.getDeclaredClasses();
    for (Class class1 : declaredClasses) {
        System.out.println(Modifier.isStatic(class1.getModifiers()));
    }
}
}

class Foo {
    static class A {}
    class B {}
    static class C {}
}

输出:

true
false
true

注意: Class#getModifiers() -

  

返回此类或接口的Java语言修饰符,   以整数编码。修饰符由Java Virtual组成   机器的公共,受保护,私有,最终,静态的常量,   抽象和界面;他们应该使用的方法解码   class Modifier。