Регистратор не делает ничего особенного. Это всего лишь код Java.
public class SomeClass {
private Logger logger = LogFactory.getLogger(SomeClass.class);
public void doSomething() {
this.logger.debug("foo");
}
}
this.logger
просто указывает на переменную экземпляра с именем logger
текущего экземпляра (this
). Префикс this.
, кстати, излишний в этом примере. Можно также просто сделать logger.debug("foo")
здесь.
Если он не объявлен в самом SomeClass
, то, скорее всего, он был объявлен в расширяющем классе. Проверьте класс, который объявлен в extends
.
Что касается вашего objectName.something1.something2
сомнения, вы уже смотрели, как работает System.out.println()
? System.out
возвращает объект PrintStream
, который, в свою очередь, имеет метод println()
. Таким образом, если objectName.something
возвращает полноценные Object
с методами, то вы можете просто продолжить цепочку вызовов методов.
В основном,
objectName.something1.something2;
можно перевести как
SomeObject someObject = objectName.something1;
someObject.something2;
Но если вам не нужно someObject
где-либо еще в коде, то его можно просто сократить, как в вашем примере.
Обновление : согласно вашему обновлению:
Итак, logger является объектом класса Logger (но я не понимаю, почему они не могли создать экземпляр класса обычным способом, используя «new Logger ()). Я также не понимаю, что именно logger.severe (» ") до.
Просто прочитайте javadoc рассматриваемого класса, что все это делает . Что касается того, почему его нельзя создать, это из-за фабричного шаблона .
Обновление 2 : в соответствии с другой путаницей:
Я не понимаю, почему они используют это. Я имею в виду, если я использую только имя поля, не будет ли оно по умолчанию полем этого объекта? Есть ли разница между "this.x" и "x"?
Таким образом, вы можете более четко указать, к какому из них вы хотите получить доступ. Если метод содержит, например, аргумент или локальную переменную с именем logger
, то this.logger
все равно будет ссылаться на переменную экземпляра.
public class SomeClass {
private Logger logger = LogFactory.getLogger(SomeClass.class);
public void doSomething(Logger logger) {
this.logger.debug("foo"); // Refers to the instance variable.
logger.debug("foo"); // Refers to the method argument.
}
public void doSomethingElse() {
Logger logger = LogFactory.getLogger(SomeClass.class);
this.logger.debug("foo"); // Refers to the instance variable.
logger.debug("foo"); // Refers to the method local variable.
}
}