0
votes

Utilisez un nom de classe dynamique dans la variable finale statique privée d'une classe

Considérez et par exemple comme ci-dessous:

public class LoggerTestClass {
    private static final Logger LOGGER = Logger.getLogger(LoggerTestClass.class);
}


2 commentaires

Si vous utilisez un IDE et choisissez Refactor -> Renommer au lieu de renommer manuellement, cela devrait être fait automatiquement


Pas complètement utile mais peut travailler. @Sultuske merci


3 Réponses :


1
votes

Vous pouvez utiliser Lombok pour y aller de manière propre. Tout ce que vous avez à faire est de mettre @log en haut de votre classe et vous donnera un objet journal pour travailler avec. En savoir plus ici


0 commentaires

0
votes

bro, pour la question, tout d'abord, nous avons besoin de préciser certains concept.

en Java, si un identifiant est membre d'une classe et décoré par mot-clé "statique", sa valeur est décidée dans le Compiler la phase. p>

Si le mot-clé "final" est ajouté, l'identifiant est constant, la valeur doit avoir une valeur initiale sur elle est déclarée.Et la valeur ne peut pas être modifiée dans le jeu d'exécution Java.

Et la chose intéressante est que la consentement statique est uniquement déclarée à l'intérieur de la classe, elle peut être appelée «Nom de classe» + ». , mais n'a aucun lien avec le contexte de la classe. S'il n'y a pas de contexte, l'identifiant est devenu dynamique. strong> p>

Je pense que si l'identifiant devient dynamique, il n'y a que deux façons: p>

  1. laissez l'identifiant devenir une variable.Retirer le mot clé «final». Le code ressemble à ceci: p>

    class Test {
    
        private static Logger LOGGER;
    
        public Test() {
            LOGGER = Logger.getLogger(getClass().getSimpleName());
        }
    
    }
    
  2. essayez le proxy dynamique Java. Il peut changer la classe dans Java Runtime. strong> p> li> ol>

    code heureux ~ p>

    Bienvenue pour parler avec moi ~ p> p>


0 commentaires

0
votes

Pouvez-vous utiliser Java 9+? Ensuite, la solution est assez simple: xxx

comme méthodhandles.lookup () crée une recherche à l'aide de la classe de l'appelant. (via reflexion.gecallerclass () mais réflexion est une API interne, vous avez donc besoin de cette étape de recherche de méthode supplémentaire)


0 commentaires