Tudo o que estou tentando fazer é obter o nome da classe atual e o java acrescenta um inútil e inútil $ 1 ao final do nome da minha classe. Como posso me livrar dele e retornar apenas o nome da classe real?
String className = this.getClass().getName();
String className = getClass().getName().substring(0, getClass().getName().indexOf("$"))
$1
, porque o nome da classe é$1
. Se você espera algo mais, usethis
na classe certa em vez da errada.Respostas:
O "$ 1" não é "inútil sem sentido". Se sua turma for anônima, um número será anexado.
Se você não quiser a classe em si, mas a classe declarante, poderá usar
getEnclosingClass()
. Por exemplo:Você pode mover isso em algum método de utilitário estático.
Mas observe que esse não é o nome da classe atual. A classe anônima é diferente da classe envolvente. O caso é semelhante para classes internas.
fonte
null
e usar a última não-null
classe que você obteve?Experimentar,
Isso funcionará desde que você não o use em um método estático.
fonte
""
Tente usar este
this.getClass().getCanonicalName()
outhis.getClass().getSimpleName()
. Se for uma classe anônima, usethis.getClass().getSuperclass().getName()
fonte
Você pode usar
this.getClass().getSimpleName()
, assim:fonte
A combinação de ambas as respostas. Também imprime um nome de método:
fonte
essa resposta está atrasada, mas acho que há outra maneira de fazer isso no contexto da classe de manipulador anônimo.
Digamos:
alcançará o mesmo resultado. Além disso, é realmente bastante conveniente, pois todas as classes são definidas em tempo de compilação, portanto, nenhuma dinamicidade é danificada.
acima disso, se a classe é realmente aninhada, ou seja,
A
na verdade é delimitada porB
, a classe B pode ser facilmente conhecida como:fonte
No seu exemplo,
this
provavelmente se refere a uma instância de classe anônima. Java atribui um nome a essas classes anexando$number
a ao nome da classe envolvente.fonte
Estou assumindo que isso está acontecendo para uma classe anônima. Quando você cria uma classe anônima, na verdade você cria uma classe que estende a classe cujo nome você recebeu.
A maneira "mais limpa" de obter o nome desejado é:
Se sua classe é uma classe interna anônima,
getSuperClass()
você deve fornecer a classe da qual ela foi criada. Se você o criou a partir de uma interface, é uma espécie de SOL, porque o melhor que você pode fazer égetInterfaces()
que pode lhe dar mais de uma interface.A maneira "hacky" é apenas pegar o nome
getClassName()
e usar um regex para soltar o$1
.fonte
Aqui está uma variante do Android, mas o mesmo princípio também pode ser usado em Java comum.
fonte
Descobri que isso funciona para o meu código, no entanto, meu código está obtendo a classe de uma matriz dentro de um loop for.
fonte
APIs de reflexão
fonte