web-dev-qa-db-ja.com

リフレクションを使用して、Java class 'で宣言された内部クラスを検出できますか?

Javaでは、JDKライブラリを使用して別のクラス内に実装されているプラ​​イベートクラスを検出する方法はありますか?それとも、asmのようなものを使用する必要がありますか?

40
Jen S.

Class.getDeclaredClasses() が答えです。

60
Jen S.
package com.test;

public class A {

    public String str;

    public class B {
        private int i;
    }
}
package com.test;

import junit.framework.TestCase;

public class ReflectAB extends TestCase {
    public void testAccessToOuterClass() throws Exception {
           final A a = new A();
           final A.B b = a.new B();
           final Class[] parent = A.class.getClasses();
           assertEquals("com.test.A$B", parent[0].getName());
           assertEquals("i" , parent[0].getDeclaredFields()[0].getName());
           assertEquals("int",parent[0].getDeclaredFields()[0].getType().getName());
           //assertSame(a, a2);
        }

}
6
Shrirang

私はこれがあなたが求めているものだと思います:Class . getClasses()

5
Cogsy