当前位置: 首页 > 知识库问答 >
问题:

Java 8中实例方法引用类型之间有什么区别?

欧阳飞章
2023-03-14

因此,Java 8引入了方法引用,文档描述了这四种类型。

我的问题是这两种实例类型之间有什么区别?

  1. 对特定对象的实例方法的引用。
  2. 引用特定类型的任意对象的实例方法。

两者都引用了参考文献,但有什么显著不同?是不是用来解决它们的类型推断不同?(在他们的例子中)一个是闭包,另一个是lambda,这有意义吗?这与方法上的参数数量有关吗?

共有3个答案

宿鹏程
2023-03-14

我写下了我在这里得出的结论,以下是一个总结。

Oracle将四种方法参考描述如下。

他们应该写的是:

我发现他们对前两个的描述令人困惑(“对静态方法的引用”和“对特定对象的实例方法的引用”),我认为这实际上是类静态和对象之间的区别。

我更愿意将第一个视为提前已知的特定对象的实例方法,而将第二个视为稍后将提供的任意对象的实例方法。有趣的是,这意味着第一个是闭包,第二个是lambda。一个是绑定的,另一个是未绑定的。

方法引用对某事物关闭(闭包)和不关闭(lambda)之间的区别可能有点学术,但至少它比Oracle无用的描述更正式。如果您对闭包和lambda之间的区别感兴趣,请查看这篇文章。

这两种类型的实例方法引用之间的区别很有趣,但基本上是学术性的。有时,您需要传递一些东西,而其他时候,lambda的用法会为您提供它。我对Oracle的留档感到不满。他们对这种区别大加赞赏,但没有用易于理解的方式来描述它。这是规范的参考材料,但它完全令人困惑。

我还写了一到两个细节。

暨宸
2023-03-14
匿名用户

这意味着你拥有以下内容:

1) 例如,可以是this::someFunction,这将返回当前对象的引用。

2)可以是例如String::toUpperCase,这将返回StringtoUpperCase方法。

我不确定行为是否有实际差异,我认为这就像您也可以对实例变量调用静态方法一样。

束涵涤
2023-03-14

>

  • myString::charAt将接受一个int返回一个char,并且可能用于任何以这种方式工作的lambda。它本质上翻译为索引-

    String::length将获取一个字符串,并返回一个int。它本质上翻译为字符串-

    字符串::charAt将转换为(字符串,索引)-

  •  类似资料:
    • 问题内容: 因此Java 8引入了方法参考,并且文档描述了这四种类型。 我的问题是两种实例类型有什么区别? 引用特定对象的实例方法。 引用特定类型的任意对象的实例方法。 两者都引用参考,但是有什么显着不同?用来解析它们的类型推断是否不同?(在他们的示例中)一个是闭包,另一个是lambda是否有意义?与方法中的参数数量有关吗? 问题答案: 将采用并返回,并且可用于以这种方式工作的任何lambda。从

    • 问题内容: 这是过去的考试问题,我想知道什么是原始类型和引用类型?对于数组,我知道引用类型是由对象或变量组成的数组,而原始类型是仅使用int或字符串创建数组的类型。(对?) 您认为您会如何回答测试中的问题并获得良好的信誉?如果没有真正直接引用原始的ARRAY类型,有没有办法做到这一点?还是您只用数组解释一下就可以了。 问题答案: 这些是Java中的原始类型: boolean byte short

    • 问题内容: 类方法和实例方法有什么区别? 实例方法是访问器(getter和setter)而类方法是其他所有东西吗? 问题答案: 就像大多数其他答案所说的那样,实例方法使用类的实例,而类方法只能与类名一起使用。因此在Objective-C中对它们进行了定义: 然后可以像这样使用它们: 一些真实世界的类方法的例子是很多基础类,如方便的方法的或的。实例方法将是的方法。

    • 问题内容: 嗨,我在我的经验中都使用了这两种方法,而我当时在想方法和类型都是 POST 和 GET 方法。 但是似乎它们并不相似。 如果我使用它正在工作,我是一个表格数据。 如果我写它不起作用,谁能解释他们之间的区别是什么..? 帮助是适当的。 问题答案: 类型(默认:’GET’)类型:字符串方法的别名。 如果您使用的是1.9.0之前的jQuery版本, 则应使用 type。 http://api

    • 问题内容: 之间是否存在有意义的区别: 与 如果要创建很多实例,这两种样式在性能或空间要求上是否有任何区别?阅读代码时,您是否认为两种样式的含义有明显不同? 问题答案: 除了性能方面的考虑外,还有明显的语义差异。在类属性的情况下,仅引用一个对象。在实例属性设置实例中,可以有多个引用对象。例如

    • 问题内容: 我在阅读PEP 0008(样式指南)时,发现它建议在实例方法中使用self作为第一个参数,而在类方法中使用cls作为第一个参数。 我已经使用并编写了一些类,但从未遇到过类方法(嗯,一种将cls作为参数传递的方法)。有人可以告诉我一些例子吗? 谢谢! 问题答案: 实例方法 创建实例方法时,第一个参数始终为。您可以随意命名,但含义始终相同,并且由于其是命名约定,因此应使用。 (通常)在调用