Como obter o nome binário de uma classe java, se tiver apenas o nome completo?

As classes e métodos de reflexão, bem como os carregadores de classes, etc., precisam dos chamados nomes "binários" de classes para trabalhar.

A questão é, como se obtém o nome binário se um só tiver o nome completo, ou seja, o nome que se usaria no código-fonte.

Por exemplo:

package frege;
public static class RT {
    ....
    public static class X { .... }
}

O nome totalmente qualificado da classe seriafrege.RT.X. No entanto, para obter o objeto de classe, é necessário escrever:

Class.forName("frege.RT$X")

e não

Class.forName("frege.RT.X")    // fails with ClassNotFoundException

PorqueX passa a ser uma classe interna defrege.RT.

Uma solução possível, mas desajeitada, seria substituir. com$ de trás para frente, um por um, atéClass.forName() não jogaClassNotFoundException mais ou não há mais. para substituir.

Existe alguma solução melhor / bem conhecida / padrão? Eu olhei nos documentos da API paraClass, CLassLoader ejava.lang.reflect mas não encontrou nada utilizável.

questionAnswers(3)

yourAnswerToTheQuestion