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".

Foi útil?

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:)

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top