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

為了賬號安全,請及時綁定郵箱和手機立即綁定

Java 雙冒號“::”是什么操作符

標簽:
Java

双冒号运算就是Java中的[方法引用] Method references

[方法引用]的格式是 类名::方法名

一般是用作Lambda表达式。

形如 ClassName::methodName 或者 objectName::methodName 的表达式,我们把它叫做方法引用(Method Reference)。可能你现在还理解不了,但是编译器足够聪明,或许你可以看看编译器是如何根据 “晦涩难懂” 的 Method Reference 来推断你的意图的。

例如:

1.表达式:
person -> person.getName();
可以替换成:
Person::getName

2.表达式:
() -> new HashMap<>();
可以替换成:
HashMap::new

方法引用的种类

方法引用有四种,分别是:

  • 指向静态方法的引用
  • 指向某个对象的实例方法的引用
  • 指向某个类型的实例方法的引用
  • 指向构造方法的引用
    方法的引用

总结
其实,JVM 本身并不支持指向方法引用,过去不支持,现在也不支持。

Java 8 对方法引用的支持只是编译器层面的支持,虚拟机执行引擎并不了解方法引用。编译器遇到方法引用的时候,会像上面那样自动推断出程序员的意图,将方法引用还原成接口实现对象,或者更形象地说,就是把方法引用设法包装成一个接口实现对象,这样虚拟机就可以无差别地执行字节码文件而不需要管什么是方法引用了。

需要注意的是,方法引用是用来简化接口实现代码的,并且凡是能够用方法引用来简化的接口,都有这样的特征:有且只有一个待实现的方法。这种接口在 Java 中有个专门的名称: 函数式接口。当你用试图用方法引用替代一个非函数式接口时,会有这样的错误提示: xxx is not a functional interface。

點擊查看更多內容
1人點贊

若覺得本文不錯,就分享一下吧!

評論

作者其他優質文章

正在加載中
JAVA開發工程師
手記
粉絲
37
獲贊與收藏
353

關注作者,訂閱最新文章

閱讀免費教程

感謝您的支持,我會繼續努力的~
掃碼打賞,你說多少就多少
贊賞金額會直接到老師賬戶
支付方式
打開微信掃一掃,即可進行掃碼打賞哦
今天注冊有機會得

100積分直接送

付費專欄免費學

大額優惠券免費領

立即參與 放棄機會
微信客服

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

幫助反饋 APP下載

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

公眾號

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

舉報

0/150
提交
取消