2016-05-03 5 views
0

ich bemerkt, wenn sie durch einen Teil der Java-Code bei meiner Arbeit suchen, dass, wenn wir die Logging-Framework in jeder Klasse zu initialisieren haben wir so etwas wie:Gibt es einen Grund, 'ClassName.class' gegenüber 'this.getClass()' vorzuziehen, um eine Instanz des Klassenobjekts zu erhalten?

private final Logger log = Logger.getLogger(Foo.class); 

Dies hat mir denken, gibt es keinen Grund, dass wir Foo.class verwenden eher als:

private final Logger log = Logger.getLogger(this.getClass()); 

Ist das einfach eine Vorliebe oder gibt es einen praktischen Grund, einen vor dem anderen zu bevorzugen?

Edit: ursprünglich die Code-Snippets referenzierte statische Mitglieder, die offensichtlich nicht kompiliert hätten.

+0

Siehe auch http://stackoverflow.com/questions/10725402/generic-way-of-getlogger-from-log4j-logger –

+0

Wenn Sie in einem nicht-statischen Kontext waren, könnten Sie entweder, aber sie sind von unterschiedlicher Art: 'Foo.class' ist vom Typ' Class '; 'aFoo.getClass()' hat den Typ 'Class '. –

+0

Mein Fehler, ich habe den Logging-Code kopiert und eingefügt und das 'static' dort nicht bemerkt. Das war nicht beabsichtigt. Ich werde die ursprüngliche Frage bearbeiten. –

Antwort

2

Das Bit über statische Kontexte ignorieren (was völlig korrekt ist - angenommen, Ihre Ausdrücke in diesen Initialisierungen werden stattdessen in Instanzmethoden verschoben) - eine Methode mit this.getClass() wird sehr unterschiedliche Ergebnisse haben, wenn sie von einer Unterklasse aufgerufen wird!

Wenn Sie das Klassenobjekt für Foo verwenden möchten, verwenden Sie immer die erste Version.

Wenn Sie die Klasse des Aufrufers (eine Unterklasse von Foo) möchten, verwenden Sie die zweite Version.

Verwandte Themen