Могу ли я обнаружить объявленные внутренние классы Java-класса, используя отражение? - PullRequest
40 голосов
/ 23 января 2009

Есть ли в Java какой-либо способ использовать библиотеки JDK для обнаружения закрытых классов, реализованных в другом классе? Или мне нужно так использовать что-то вроде asm?

Ответы [ 3 ]

57 голосов
/ 23 января 2009

Class.getDeclaredClasses() является ответом.

6 голосов
/ 20 января 2012
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);
        }

}
4 голосов
/ 23 января 2009

Я думаю, это то, что вы ищете: Class. getClasses () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...