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.