Considérez et par exemple comme ci-dessous:
public class LoggerTestClass { private static final Logger LOGGER = Logger.getLogger(LoggerTestClass.class); }
3 Réponses :
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> laissez l'identifiant devenir une variable.Retirer le mot clé «final». Le code ressemble à ceci: p>
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>
class Test {
private static Logger LOGGER;
public Test() {
LOGGER = Logger.getLogger(getClass().getSimpleName());
}
}
Pouvez-vous utiliser Java 9+? Ensuite, la solution est assez simple: comme méthodhandles.lookup () code> crée une recherche à l'aide de la classe de l'appelant. (via
reflexion.gecallerclass () code> mais
réflexion code> est une API interne, vous avez donc besoin de cette étape de recherche de méthode supplémentaire) p> p>
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