【问题标题】:Which methods can I use?我可以使用哪些方法?
【发布时间】:2018-10-23 21:36:09
【问题描述】:

我正在编写一个简单的方法,它返回一个 int 数组的最小值和最大值。

return new int[]{Arrays.stream(arr).min().getAsInt(), Arrays.stream(arr).max().getAsInt()};

这让我开始思考,为什么我能够使用 getAsInt() 方法,而它来自与我正在使用的类(数组)不同的类?我什至不必导入 OptionalInt 类,这是为什么呢?在这种特殊情况下,是什么决定了我可以使用和不能使用哪些方法?提前感谢您的任何回复。

【问题讨论】:

  • Arrays.stream(arr).min().getAsInt() 这样的表达式与(((Arrays.stream(arr)).min()).getAsInt()) 相同。计算第二个最内层括号 (Arrays.stream(arr)) 中的表达式,结果具有特定类型,该类型决定下一个外部级别可以应用哪些方法。
  • 你有什么样的进口?如果您使用了诸如import java.util.* 之类的一揽子导入,那将包括OptionalInt。
  • 您始终可以在给定对象上使用任何可访问的方法。导入只需要识别不合格的类名。

标签: java methods inner-classes


【解决方案1】:

这是因为min() 方法返回一个OptionalInt 对象。然后您可以调用方法getAsInt()。您没有从 Arrays 类中调用该方法。每个方法都返回一个特定类型的值。

【讨论】:

    【解决方案2】:

    特别是在Arrays 上,您只调用stream 方法:https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#stream-int:A- 还有更多,但这是接受ints 数组的方法。
    然后它产生一个IntStream,它有max/min创建一个OptionalInt,然后你在那个对象上调用getAsInt,而不是Arrays。

    也许您在问是否可以在“从某个地方获得”的对象上调用方法,而无需直接importing 他们的类:答案是肯定的,它已经发生在最简单的“Hello World”中:当您编写System.ou.println(...),您在 PrintStream 上调用 println,在编写“Hello World”时没有人会导入它。

    【讨论】:

      猜你喜欢
      • 2010-09-17
      • 2020-11-02
      • 2020-01-21
      • 1970-01-01
      • 1970-01-01
      • 2019-04-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多