Java的方法引用
根据Oracle Documentation,String::compareToIgnoreCase
也是一个有效的方法引用,我的问题是compareToIgnoreCase
不是一个静态方法,换句话说,compareToIgnoreCase
必须附加到一个特定的String
实例。那么,当我使用String::compareToIgnoreCase
时,JDK如何知道我引用了String
的哪个实例呢
你可以在下面搜索框中键入要查询的问题!
根据Oracle Documentation,String::compareToIgnoreCase
也是一个有效的方法引用,我的问题是compareToIgnoreCase
不是一个静态方法,换句话说,compareToIgnoreCase
必须附加到一个特定的String
实例。那么,当我使用String::compareToIgnoreCase
时,JDK如何知道我引用了String
的哪个实例呢
# 1 楼答案
考虑下面的例子,使用^ {CD1>},这也是一个实例方法。
它在这种情况下工作,因为正在处理的流项与正在调用的方法的类的类型相同。因此,该项实际上直接调用该方法
所以
String::toUpperCase
调用将与"abcde".toUpperCase()
相同如果你做了这样的事:
“abcde”不是
OtherClass
的类型,因此OtherClass
需要如下所示,流才能工作# 2 楼答案
这就好像还有一个额外的参数,即实际的实例
例如
String::compareToIgnoreCase
我们得到一个
ToIntBiFunction
——一个返回int
的双参数函数——因为结果是一个int
,第一个参数对应于compareToIgnoreCase
的this
,第二个函数参数是传递给compareToIgnoreCase
的参数也许简单一点:
length
不接受任何参数,但函数的第一个参数用作调用实例length
上面的例子非常抽象,只是为了说明所涉及的类型。这些函数大多直接用于某些方法调用,不需要使用中间变量
# 3 楼答案
String::compareToIgnoreCase
没有像str1.compareToIgnoreCase(str2)
那样使用。 它实际上被用作比较器。 你可以把它比作但在这种情况下,它将是