Изучая JAVA, нужна помощь в понимании концепции getLogger().info() (цепочка методов)

Я застрял со следующей строкой кода:

getLogger().info("Text Goes Here");  // This command outputs the text to console

Я понимаю основы того, как объекты работают и вызываются, но в видеороликах, которые я смотрел на YouTube, vivz (автор) никогда не объяснял вызов методов внутри методов (по крайней мере, я думаю, что это происходит в приведенном выше коде).

Он объяснил о

ClassName.variable
xVariable.method()

но ничего связанного с

someMethod().anotherMethod();

с точки зрения начинающих, может ли кто-нибудь объяснить концепцию или какое-то объяснение того, что здесь происходит?

По сути, я хочу знать, является ли info() методом внутри getLogger() или что такое getLogger() и info() в данном случае?


person nando    schedule 31.12.2015    source источник
comment
Это не метод внутри метода, это два вызова метода. Сначала вызывается getLogger(), а по возвращаемому значению (объекту) вызывается следующий info(String).   -  person YoungHobbit    schedule 31.12.2015
comment
хм, это что-то вроде конвейера в Linux? cat filename | grep matchingtext   -  person nando    schedule 31.12.2015
comment
В некотором смысле да. Здесь мы используем возвращаемый объект из предыдущего вызова для выполнения следующей операции. Так, например, вместо вызова concat() вы можете вызвать метод trim() или length() для возвращенного экземпляра. Если возвращаемый экземпляр отличается от String, вы можете вызывать/выполнять операции, определенные для этой операции.   -  person YoungHobbit    schedule 31.12.2015


Ответы (3)


Это называется цепочкой методов.

Цепочка методов — это общий синтаксис для invoking multiple method calls в объектно-ориентированных языках программирования. Каждый метод возвращает объект, что позволяет объединить вызовы в единую инструкцию, не требуя переменных для хранения промежуточных результатов.

Это не метод внутри метода, это два вызова метода. Сначала вызывается getLogger(), а по возвращаемому значению (объекту) вызывается следующий info(String). Вы связываете два вызова метода в одном выражении.

Я приведу пример, чтобы понять это, используя String.concat():

public static void main(String[] args) {
  String first = "First";
  // Storing the resulting instance and then call again.
  String s1 = first.concat(" Second");
  s1 = s1.concat(" Third.");

  System.out.println(s1);
  // This is method chaining using String class with concat() method.
  String s2 = first.concat(" Second").concat(" Third.");
  System.out.println(s2);  
}

Здесь String.concat() возвращает экземпляр String после объединения. Теперь у вас есть возможность сохранить экземпляр в переменной, а затем снова вызвать concat() для этого или напрямую использовать тот же экземпляр.

person YoungHobbit    schedule 31.12.2015
comment
Ага! поэтому цепочка методов. Спасибо!, плохо читать больше на нем. Спасибо, ваш пример помог мне лучше понять это! - person nando; 31.12.2015

что происходит при вызове getLogger().info("Text Goes Here");? Во-первых, с помощью getLogger() вы вызываете метод, который возвращает объект логгера (класс). На втором этапе вы вызываете info("Text goes Here") для объекта регистратора. Довольно часто вызывается цепной метод.

person Raphael Roth    schedule 31.12.2015

Метод getLogger() возвращает Object. Затем вы вызываете метод info(). Это сокращенный способ, называемый цепочкой методов. Если вы хотите, вы можете разделить это на две строки.

Logger logger = getLogger();
logger.info("Text goes Here");

Это работает так же, как `getLogget().info("Текст идет сюда");

person ThisaruG    schedule 31.12.2015