Классы и методы отражения, а также классные загрузчики и т.д. нуждаются в так называемых "двоичных" именах классов для работы.
Вопрос в том, как получить двоичное имя, если у вас есть только полное имя, то есть имя, которое будет использоваться в исходном коде.
Например:
package frege;
public static class RT {
....
public static class X { .... }
}
Полноценное имя класса будет frege.RT.X. Тем не менее, чтобы получить объект класса, нужно написать:
Class.forName("frege.RT$X")
а не
Class.forName("frege.RT.X") // fails with ClassNotFoundException
потому что X оказывается внутренним классом frege.RT.
Возможно, но неуклюжее решение заключалось бы в том, чтобы заменить . на $ назад, один за другим, пока Class.forName() больше не бросает ClassNotFoundException, или больше нет . для замены.
Есть ли лучшее/хорошо известное/стандартное решение? Я просмотрел документы API для Class, CLassLoader и java.lang.reflect, но не нашел ничего полезного.