亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

為什么當我們使用 super 時 Java 8 :: 運算符不適用于

為什么當我們使用 super 時 Java 8 :: 運算符不適用于

躍然一笑 2022-06-30 10:56:22
下面的代碼工作Function fun1= super::equalsFunction fun2= Object::hashCode 但下面的代碼不是Function fun1= Object::equalsFunction fun2= super::hashCode 即使都是 Object 類中的實例方法,這里的概念是什么。我在某處讀過主要內容:對象::實例方法類::靜態方法類::實例方法
查看完整描述

4 回答

?
白板的微信

TA貢獻1883條經驗 獲得超3個贊

Function接口是一個函數式接口,表示一個接受一個參數并返回一個值的函數。

super::equals之所以有效,是因為它是一個接受一個參數并返回一個值的函數。

Object::equals不起作用,因為它是一個接受兩個參數并返回一個值的函數。

如果您有 form 的方法引用,ClassName::instanceMethod則它表示的函數將有一個額外的參數 - 調用該方法的對象。根據文檔

方法引用的等效 lambda 表達式String::compareToIgnoreCase將具有形式參數 list (String a, String b),其中ab是用于更好地描述此示例的任意名稱。方法引用將調用該方法a.compareToIgnoreCase(b)

super::equals是形式instance::instanceMethod,所以沒有問題并且可以按您的預期工作。

用于Object::equals和的正確功能接口類型super::hashCodeBiFunction<Object, Object, Boolean>IntSupplier

另外,不要使用原始類型。


查看完整回答
反對 回復 2022-06-30
?
小怪獸愛吃肉

TA貢獻1852條經驗 獲得超1個贊

java.util.Function是一個接受一個參數的函數。

super::equals是一個接受一個參數(super與之比較的對象)的函數,因此它可以工作。Object::equals是一個接受兩個參數的函數:目標對象和要比較的對象,因此它不起作用。

同樣,Object::hashCode是一個參數的函數,但是super::hashCode參數的函數。


查看完整回答
反對 回復 2022-06-30
?
絕地無雙

TA貢獻1946條經驗 獲得超4個贊

當您編寫 時super::methodName,您正在為類的特定實例創建方法引用。因此,功能接口的方法(您分配此方法引用)必須期望與具有相同數量的參數methodName。

當您編寫ClassName::methodName, ifmethodName不是靜態方法時,您是在類的任意實例上創建方法引用。因此,功能接口的方法(您分配此方法引用)必須期望與 has + 1 相同數量的參數methodName(額外的參數是將在其上執行方法的 ClassName 的實例)。

Function接受一個參數并返回一個值。

因此,您可以為其分配特定實例的方法引用和單個參數方法(如 中super::equals)或任意實例的方法引用和 0 參數方法(如中Object::hashCode)。

但是,您不能為它分配任意實例的方法引用和單個參數方法(如 中Object::equals),因為這需要兩個參數,并且Function只需要一個參數。

由于需要兩個參數,因此您可以將此方法引用分配給 a BiFunction

BiFunction<Object,Object,Boolean> bifunc = Object::equals;

同樣,您不能為其分配特定實例的方法引用和 0 參數方法(如 中super::hashCode),因為這需要 0 個參數,并且Function需要一個。

由于需要 0 個參數,因此您可以將此方法引用分配給 a Supplier

Supplier<Integer> sup = super::hashCode;


查看完整回答
反對 回復 2022-06-30
?
三國紛爭

TA貢獻1804條經驗 獲得超7個贊

hashCode 不是函數。它是一個供應商。

Supplier fun2 = super::hashCode;


查看完整回答
反對 回復 2022-06-30
  • 4 回答
  • 0 關注
  • 166 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號