java中的::是什么意思?

forEach(System.out::println)

1
2
3
for (String s : str){
System.out.println(s);
}

上面的代码我们已经很熟悉了,可forEach(System.out::println)是什么鬼?

其实这是lambda表达式的进一步精简,等价于forEach((x)->System.out.println(x))

lambda 表达式允许4种方式的双冒号

种类 使用方法 对应的lambda表达式
应用特定对象的实例方法 Object :: instanceMethod (a,b,…)->特定对象.实例方法(a,b,…)
引用类对象 Class :: staticMethod (a,b,…)->类名.类方法(a,b,…)
引用某个类对象的实例方法 Class :: instanceMethod (a,b,…)->A.实例方法(a,b,…)
引用构造器 Class :: new (a,b,…)->new 类名(a,b,…)