9
votes

Utilisation de la classe actuelle dans la déclaration de méthode statique Java

Mon Java est rouillé alors s'il vous plaît ou supporte avec moi. Dans C, je peux faire:

import org.apache.log4j.Logger;

class myClass {
    private static final Logger logger = Logger.getLogger(myClass.class);
...
}


3 commentaires

Vous pouvez également l'avoir comme une variable d'instance et d'utiliser "cela.getclass ()". L'utilisation d'un attribut d'instance serait une meilleure idée, à moins bien sûr que vous en avez vraiment besoin en tant qu'attribut de classe.


Le compilateur sait de quelle classe c'est, mais vous ne saviez pas quelle classe vous écrivez? Désolé, je plaisante ... j'avais ce problème - presque le même code - mais je n'ai rien trouvé de mieux que MyClass.class: - / Besoin d'avoir une belle IDE avec des modèles de code et un refactoring ...


Je souhaite que Java ait ceci. Je recommanderais la syntaxe static.class .


3 Réponses :


8
votes

Malheureusement, il n'y a pas de moyen plus facile si vous êtes dans un contexte de code (comme vous êtes ici). Si l'enregistreur était une variable d'instance, vous pouvez utiliser getclass () , mais vous devriez alors vous inquiéter des sous-classes.

Pour ce cas particulier, une alternative consiste à utiliser log5j à la place. Log5J est une enveloppe autour de log4J avec des méthodes de commodité telles que getlogger () , qui déduit la classe correcte en marchant sur la pile. Donc, votre code deviendrait: xxx

et vous pouvez copier-coller la même déclaration dans toutes vos classes sans aucun problème.


1 commentaires

Le lien vers Log5J est cassé.



7
votes

Je ne pouvais pas résister.

Voici la mise en œuvre de ce que les mmyers font référence mais fabriqués à la maison :)

Fondamentalement, vous lancez une exception et obtenez le 2e élément de la pile pour obtenir le nom de la classe.

I Pensez qu'il est préférable de l'avoir comme membre d'instance.

:) xxx

utilisation: xxx < / p>


1 commentaires

Cela ressemble à celui de ma propre emballage de journalisation faite maison. :)



4
votes
StackTraceElement[] trace = Thread.currentThread().getStackTrace();
return trace[2].getClassName();
IMHO more neat way to get stack trace

0 commentaires