Java 8中的"System.out::println"有什么用?

44

我看到了一个 Java 8 的代码,用于迭代集合。

List<Integer> numbers = Arrays.asList(1, 2, 3, 4, 5, 6);
numbers.forEach(System.out::println);

System.out::println 的功能是什么?上面的代码如何遍历 List。

运算符 :: 的用途是什么?我们还可以在哪些地方使用这个运算符?

1个回答

94

这被称为“方法引用”,是以下表达式的语法糖:

numbers.forEach(x -> System.out.println(x));

在这里,实际上您不需要使用名称x来为每个元素调用println。这就是方法引用有帮助的地方- ::运算符表示您将使用参数调用println方法,该参数的名称并未明确指定:

numbers.forEach(System.out::println);

2
那么 :: 运算符还有哪些其他用途呢? - prime
6
仅用于方法引用。 - Konstantin Yovkov
8
这个 lambda 表达式与方法引用并不完全等价 - Holger
我该如何使用X作为变量传递给其他方法? - Ravi Parekh
2
评论有点晚了,但是真正的优势在哪里呢?这难道不会使代码变得更难读和更难维护吗? - satish marathe
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接