Классы и методы отражения, а также классные загрузчики и т.д. нуждаются в так называемых "двоичных" именах классов для работы.
Вопрос в том, как получить двоичное имя, если у вас есть только полное имя, то есть имя, которое будет использоваться в исходном коде.
Например:
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
, но не нашел ничего полезного.