我刚开始接触Java 8,发现很多使用流和可选对象的情况。于是就有了一个问题。考虑以下来自Oracle教程的示例:
String name = computer.flatMap(Computer::getSoundcard)
.flatMap(Soundcard::getUSB)
.map(USB::getVersion)
.orElse("UNKNOWN");
或下一个示例取自这里:
List<String> myList = new ArrayList();
myList
.stream()
.filter(s -> s.startsWith("c"))
.map(String::toUpperCase)
.sorted()
.forEach(System.out::println);
是否有一种覆盖解决方案,可以告诉我第一个片段中的orElse
是否被使用?或者其他一些解决方案,可以告诉我由于列表为空,filter
闭包根本没有被调用?是否有任何报告可以表明forEach
中的方法引用未被使用?
orElse
调用总是会发生,它的参数在调用之前总是被评估,因此它的覆盖范围不需要评估。对于 lambda 表达式,在编译期间它们会被解糖成合成方法,因此每个最新的代码覆盖率工具都应该能够处理它们。 - Holger