java - 为什么当我们使用 super 时 Java 8 :: 运算符不适用于 Object hashcode 方法?
问题描述
下面的代码工作
Function fun1= super::equals
Function fun2= Object::hashCode
但下面的代码不是
Function fun1= Object::equals
Function fun2= super::hashCode
即使都是 Object 类中的实例方法,这里的概念是什么。
我在某处读过主要内容:
- 对象::实例方法
- 类::静态方法
- 类::实例方法
解决方案
Function
接口是一个函数式接口,表示一个接受一个参数并返回一个值的函数。
super::equals
之所以有效,是因为它是一个接受一个参数并返回一个值的函数。
Object::equals
不起作用,因为它是一个接受两个参数并返回一个值的函数。
如果您有 form 的方法引用,ClassName::instanceMethod
则它表示的函数将有一个额外的参数 - 调用该方法的对象。根据文档:
方法引用的等效 lambda 表达式
String::compareToIgnoreCase
将具有形式参数 list(String a, String b)
,其中a
和b
是用于更好地描述此示例的任意名称。方法引用将调用该方法a.compareToIgnoreCase(b)
super::equals
是形式instance::instanceMethod
,所以没有问题并且可以按您的预期工作。
用于Object::equals
和的正确功能接口类型super::hashCode
是BiFunction<Object, Object, Boolean>
和IntSupplier
。
另外,不要使用原始类型。
推荐阅读
- reactjs - 如何在 React 中创建确认删除弹出窗口?
- xcode - Xcode - 使用 UNNotificationServiceExtension 时如何控制在控制台中显示哪些进程的日志?
- html - 如何在页面底部固定页脚?
- java - 为什么我不能在 for 循环中打印这个变量?
- drools - 工作流许可条件匹配
- sas - 如何在 glm 模型中编写下标(ijkl)
- java - 如何测试是否使用特定标头执行 OkHttpCall?
- reactjs - React - 自定义道具事件
- javascript - API调用的React-Native睡眠功能?
- javascript - javascript更新下一个/上一个输入字段值