Java 8中的“特定类型的任意对象”是什么意思?

2022-09-01 12:52:24

在Java 8中有“方法参考”功能。其中一种是“引用特定类型的任意对象的实例方法”

http://docs.oracle.com/javase/tutorial/java/javaOO/methodreferences.html#type

有人能解释一下“特定类型的任意对象”在这种情况下是什么意思吗?


答案 1

从链接的Oracle文档中给出的示例是:

String[] stringArray = { "Barbara", "James", "Mary", "John", "Patricia", "Robert", "Michael", "Linda" };
Arrays.sort(stringArray, String::compareToIgnoreCase);

lambda 等价物

 String::compareToIgnoreCase

(String a, String b) -> a.compareToIgnoreCase(b)

该方法正在查找比较器作为其第二个参数(在此示例中)。传递将创建一个比较器,作为比较方法的主体。然后你问好什么是和.比较方法的第一个参数变为 ,第二个参数成为 。这些是字符串(特定类型)类型的任意对象。Arrays.sort()String::compareToIgnoreCasea.compareToIgnoreCase(b)abab

不理解?

  • 确保您知道比较器是什么以及如何实现它
  • 了解什么是函数式接口以及它如何影响Java中的lambdas。
  • 比较器是一个功能接口,这就是为什么方法引用成为比较器对象内比较方法的主体的原因。
  • 阅读下面的源代码,了解页面底部的另一个示例

在源头阅读更多内容: http://moandjiezana.com/blog/2014/understanding-method-references/


答案 2

它是对某种类型的实例方法的引用。在本例中,是 来自 的方法。该程序知道它可以在 的实例上调用此方法,因此它可以获取引用和该类型的任何对象,并保证该方法存在。compareToIgnoreCaseStringString

我会将其与类进行比较,因为它们引用方法并且可以在某种类型的任意实例上调用。Method

对于该示例,它可以使用两个对象并调用一个对象,并将另一个对象用作匹配方法签名的参数。这允许它获取数组并根据数组类型的任何方法对其进行排序,而不是要求比较器实例来执行此操作。StringcompareToIgnoreCase

以下是任何没有点击问题中链接的人的示例:

String[] stringArray = { "Barbara", "James", "Mary", "John",
"Patricia", "Robert", "Michael", "Linda", "George" };
Arrays.sort(stringArray, String::compareToIgnoreCase);

推荐