【问题标题】:Learning JAVA need help understanding the concept of getLogger().info() (Method Chaining) [duplicate]学习 JAVA 需要帮助理解 getLogger().info() 的概念(方法链)[重复]
【发布时间】:2015-12-31 05:25:47
【问题描述】:

我被以下代码行卡住了:

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

我了解对象如何工作和调用的基础知识,但是在我在 youtube 上观看的视频中,vivz(作者)从未解释过在方法中调用方法(至少我认为上面发生了这样的事情代码)。

他解释了

ClassName.variable
xVariable.method()

但与

无关
someMethod().anotherMethod();

对于初学者来说,任何人都可以解释这个概念或对这里发生的事情进行一些解释吗?

基本上,我想知道info()是否是getLogger()内部的方法,或者在这种情况下getLogger()info()是什么?

【问题讨论】:

  • 不是方法里面的方法,这是两个方法调用。首先调用getLogger(),然后在返回值(对象)上调用下一个info(String)
  • 嗯,它类似于 linux 中的管道吗? cat filename | grep matchingtext
  • 在某种意义上是的。这里我们使用上一个调用的返回对象来执行下一个操作。因此,例如,您可以在返回的实例上调用trim()length() 方法,而不是调用concat()。如果返回的实例与String 不同,那么您可以调用/执行为该操作定义的操作。

标签: java methods bukkit chaining


【解决方案1】:

这叫Method Chaining

方法链接是面向对象编程语言中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() 或直接使用同一个实例。

【讨论】:

  • 啊哈!所以方法链。谢谢!,生病阅读更多关于它。谢谢你的例子帮助我更好地理解它!
【解决方案2】:

调用getLogger().info("Text Goes Here"); 时会发生什么?首先,使用getLogger() 调用返回记录器对象(类)的方法。在第二步中,您在记录器对象上调用info("Text goes Here")。链方法调用很常见。

【讨论】:

    【解决方案3】:

    getLogger() 方法返回一个Object。然后你调用info() 方法。这是一种称为方法链接的简写方式。如果你愿意,你可以把它分成两行。

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

    这与 `getLogget().info("Text goes here"); 的作用相同;

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-08
      • 2020-07-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多