为什么选择Java 8的双冒号运算符?

Sma*_*ker 4 java syntax operators java-8

在Java 8之前,我的观察是,引用成员方法的事实标准是使用#符号(例如Object#toString()).然后是Java 8,它选择了::运算符进行方法引用,看似没有理由.

对于为何::特别选择了原因,是否有官方解释或理由?

gon*_*ard 5

你可以找到一个"官方的解释或理由"作者Brian Goetz.您应该阅读完整的讨论,但这是一个摘录:

::中缀语法:

   ClassName::methodName 
   ClassName<T>::methodName 
   ClassName::<U>genericMethodName 
Run Code Online (Sandbox Code Playgroud)

工作得很好.有些人喜欢它,有些人讨厌它 - 就像#.对于任何让每个人齐声跳起来说"是的,就是这样!"的东西,永远不会是一个完美的语法.但是::没关系,使用up :: here比使用#更好.(而且,虽然这对C++程序员来说可能看起来有些奇怪,但Java和C++开发人员基础之间的重叠程度足够小,以至于我认为我们不应该过于担心这一点.)