怎么理解Java里的双冒号 “::”
“::”是什么?
在java中,双冒号“::”是方法引用的语法。方法引用是简化Lambda表达式的语法结构,使代码更简洁易懂,并且在使用引用方法时,会根据上下文推断参数类型,因此特别适用于直接引用已有方法的情况。
“::”的用法
其实,Class是包含静态方法methodName的类名,根据引用的方法类型不同,有不同的情况:
1.静态方法引用
假设我们有一个自定义的工具类MathUtil,其中就包含了一个静态方法square,用于计算一个整数的平方。现在我们想要计算一个整数列表中所有元素的平方和。
在上述方法中,我们通过使用静态方法引用MathUtil::square,将数组中的数组转成int类型,再使用mapToInt方法循环调用square(int num)方法,以便对列表中每个元素进行平方运算。
2.实例方法的引用
假设我们有一个字符串列表,我们想要按照字符串长度进行排序,我们可以使用Lambda表达式编写比较器,也可以使用实例方法引用简化代码。
在上述代码总,我们首先使用了Lambda编写了一个比较器进行字符串比较,然后又使用实例方法引用来简化比较器的写法,无需传递参数,直接调用方法,
3.对象方法引用
假设我们有一个自定义的Student类,其中包含姓名和年龄属性。我们想要根据student对象的年龄进行排序。
上述代码中,我们首先使用Lambda编写了一个比较器来根据年龄进行排序。然后我们又使用对象方法引用Student::compareAge来简化比较器的写法。其实个人觉得和实例方法引用没什么区别,无非就是一个引用自定义的,一个引用别人写好的。
4.构造方法引用
假设我们需要创建一个空的ArrayList,可以使用构造方法引用来实现。
1 import com.google.common.base.Supplier; 2 import java.util.ArrayList; 3 import java.util.List; 4 5 public class StructureUtil { 6 public static void main(String[] args) { 7 Supplier<List<String>> supplier = ArrayList::new; 8 List<String> strings = supplier.get(); 9 System.out.println(strings instanceof List); //true 10 } 11 }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 【自荐】一款简洁、开源的在线白板工具 Drawnix
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· Docker 太简单,K8s 太复杂?w7panel 让容器管理更轻松!