Obtendo o nome Invocation Usado em Java
-
23-08-2019 - |
Pergunta
Eu estou tentando encontrar uma maneira genérica para replicar essa funcionalidade C:
int main(int argc, char** argv){
fprintf(2,"%s: error you did something wrong.\n", argv[0]);
return 1;
}
em java. Até agora, a única maneira era codificar isso no aplicativo, que é feio. Eu gostaria de obter algo semelhante a:
someObj.getClass().getSimpleName();
dentro da minha estática principal, sem se referir de volta para minha própria classe.
Isto é mesmo possível?
Editar
A minha busca por uma boa hora não virou até um presente.
pergunta duplicados, consulte $ 0 (Nome do Programa) em Java? Descubra classe principal? para resposta ??p>
Outras dicas
A forma java encontra a classe em que para executar static void main()
é pelo nome passou para o executável java (eo classpath). Portanto, não é possível ter run principal a menos que o nome correto foi aprovada.
* Bem, a menos que o principal que é encontrado chamadas algo como "FooBar.main ()" ou usa o carregador de classe para encontrá-lo.
Mesmo assim, como principal é estático e funções estáticas não são virtuais, o que quer principal é chamado é chamado porque principal foi chamado para essa classe. Assim, no seu código, o nome (que inn't passou nos argumentos a principal) em apenas o nome da classe que a função main
está.
Assim, nunca há um erro, e por isso nunca precisa encontrar o nome.
A única coisa que posso pensar é que você determinar qual segmento é o segmento principal, começa o rastreamento de pilha desse segmento e, em seguida, caminhar de volta para o topo da pilha e interrogar o nome da classe e método de nome do elemento a ver se é o que você quer.
Isso é que muito nojenta. Eu reconsidere a exigência original e veja se não há um meio mais simples e direta de alcançar o que deseja.
Eu não acho que isso é possível. A maneira mais fácil de imprimir isso é usando MyClass.class.getSimpleName (), ou você pode criar (não jogar) um Throwable, imprimir o rastreamento de pilha, e de lá ir.