Collections.emptyList() 和 Collections::emptyList 有什么区别
What is the difference between Collections.emptyList() vs Collections::emptyList
使用 java 流时编码时显示错误
Optional.ofNullable(product.getStudents())
.orElseGet(Collections.emptyList())
.stream().map(x->x.getId)
.collect(Collectors.toList());
此代码显示以下错误
错误
incompactible type, Required Supplier> but
empty list was interfered to List : no instance of type variable
of T exist so List conforms to Supplier>
但是如果我用 Collections::emptyList
替换 Collections.emptyList()
会很完美的。
Collections.emptyList() 和 Collections::emptyList 有什么区别?
Collections.emptyList()
是returns一个List<T>
的static
方法,即表达式Collections.emptyList()
将执行emptyList()
方法及其值将是 List<T>
。因此,您只能将该表达式传递给需要 List
参数的方法。
Collections::emptyList
是一个方法引用,可以实现一个功能接口,其单个方法具有匹配的签名。
A Supplier<List<T>>
是一个函数式接口,它有一个 returns 和 List<T>
的方法,它与 Collections.emptyList()
的签名相匹配。因此,一个方法 - 例如 Optional
的 orElseGet(Supplier<? extends T> other)
- 在你的例子中需要一个 Supplier<? extends List<Student>>
- 可以接受方法引用 Collections::emptyList
,它可以实现该接口。
:: operator is shorthand for lambdas calling a specific method – by name.它当然是更具可读性的语法。
它也可以与实例方法的静态一起使用。
对于静态:
Collections::emptyList
例如:
System.out::打印
使用 java 流时编码时显示错误
Optional.ofNullable(product.getStudents())
.orElseGet(Collections.emptyList())
.stream().map(x->x.getId)
.collect(Collectors.toList());
此代码显示以下错误 错误
incompactible type, Required Supplier> but empty list was interfered to List : no instance of type variable of T exist so List conforms to Supplier>
但是如果我用 Collections::emptyList
替换 Collections.emptyList()
会很完美的。
Collections.emptyList() 和 Collections::emptyList 有什么区别?
Collections.emptyList()
是returns一个List<T>
的static
方法,即表达式Collections.emptyList()
将执行emptyList()
方法及其值将是 List<T>
。因此,您只能将该表达式传递给需要 List
参数的方法。
Collections::emptyList
是一个方法引用,可以实现一个功能接口,其单个方法具有匹配的签名。
A Supplier<List<T>>
是一个函数式接口,它有一个 returns 和 List<T>
的方法,它与 Collections.emptyList()
的签名相匹配。因此,一个方法 - 例如 Optional
的 orElseGet(Supplier<? extends T> other)
- 在你的例子中需要一个 Supplier<? extends List<Student>>
- 可以接受方法引用 Collections::emptyList
,它可以实现该接口。
:: operator is shorthand for lambdas calling a specific method – by name.它当然是更具可读性的语法。
它也可以与实例方法的静态一起使用。
对于静态: Collections::emptyList
例如: System.out::打印