É possível obter o nome da classe de um método estático? [duplicado]
-
21-08-2019 - |
Pergunta
Duplicate possíveis:
Obtendo o nome da classe de um método estático em Java
Quando você está dentro de um método estático, há uma maneira de obter o nome da classe (uma string contendo o nome) sem digitar o próprio nome da classe?
Por exemplo, digitar MyClass.class.getName()
não é mais útil do que apenas "Myclass"
.
Solução
Você pode fazê-lo através da criação (não jogar) uma nova exceção e fiscalizar o seu rastreamento de pilha. Sua classe será o elemento zeroth como é a origem da exceção. É meio que se sente mal, mas vai funcionar.
System.out.println( new Exception().getStackTrace()[0].getClassName() );
Você pode fazer o mesmo com a classe Thread. Isto parece mais limpo para mim, mas a linha é ligeiramente mais longo. Sua classe é agora o primeiro elemento no stacktrace em vez do zeroth. Thread.getStackTrace () é o zeroth.
System.out.println( Thread.currentThread().getStackTrace()[1].getClassName() );
Por exemplo, MyClass.class.getName digitação () não é mais útil do que apenas "Minhaclasse".
Ao contrário, se mudar o nome MyClass usando a função refactor do seu IDE ele irá substituir MyClass.class.getName () com RenamedClass.class.getName (). Se você colocar uma corda lá você vai ter que fazê-lo manualmente.
Outras dicas
Você pode usar uma classe interna anônima:
class Test {
public static void main(String[] args) {
String className = new Object(){}.getClass().getEnclosingClass().getName();
System.out.println(className);
}
}
Se é apenas uma questão de poupar algum digitação, então não pensar nisso. Usando MyClass.class permite que todas as ferramentas de refatoração para reconhecer e trabalhar adequadamente com o seu código.
Quando você escolhe a programar em Java, você irá digitar um monte. Use um IDE que irá ajudá-lo para que você não tem que digitar tão grande:)