Java "selbst" (statische) Referenz
Ich bin auf der Suche nach einem "selbst" Referenz auf die aktuelle Klasse in JAVA in einem statischen Kontext Methoden wie PHP-Scope-Resolution-Operator?
Lösung: Break out of scope? VORSICHT, dies ist im Vergleich zu einer statischen definition wirklich langsam (um den Faktor 300):
static Logger LOG = LoggerFactory.getLogger(new RuntimeException().getStackTrace()[0].getClassName());
Die altmodische Art und Weise wäre:
static Logger LOG = LoggerFactory.getLogger(<Classname>.class.getName());
Gibt es alternativen? Ich bin auf der Suche nach einem Weg, um die logger-definition in eine abstrakte Klasse. Der logger sollte bestimmen die Klasse aufgerufen wird, von selbst.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Die etwas schneller
Wenn du das 1000 mal machen wird es dauern, 36 ms über die Klasse.Klasse.getName() und 60 ms, es zu tun auf diese Weise. Vielleicht auch nicht Wert, sich sorgen darüber zu viel. 😉
Sollten Sie nicht Erben logger. Nur erklären logger in jeder Klasse.
Aber wenn Sie nicht wollen, zu tun wie nützlich denken, nur machen Sie es nicht statische)
Ich glaube nicht, dass es irgendwelche alternativen, die unterscheiden sich deutlich von den beiden in deiner Frage.
Könnten Sie eine helper-Methode wie diese:
dann
aber das ist so teuer, wie die ursprüngliche version. (FWIW, - bis 300-mal so langsam ist, ist wohl kein großes Problem, es sei denn, Sie haben Tausende von diesen Loggern. Jede dieser Statik ist initialisiert nur einmal ...)
Meine persönliche Präferenz ist für die "altmodische" Art und Weise tun.
Brauchen Sie nicht zu verwenden, jede von denen. Was ich finde, bequem zu bedienen ist:
//Logger
private static final Logger logger = LoggerFactory.getLogger(CreateEmployeeRecord.class oder this.class);
Tun es in jeder Klasse muss die Protokollierung und die Klasse ändern Namen in Klammer auf entsprechende Klasse, wo immer es verwendet wird.