Java 8的orElse无法正常工作
考虑以下方法,该方法将返回一个字段(如果存在)或递归调用自身直到找到该字段:
private Field getField(Class<?> clazz, String p) { Optional<Field> field = Arrays.stream(clazz.getDeclaredFields())
.filter(f -> p.equals(f.getName()))
.findFirst();
return field.isPresent() ? field.get() : getField(clazz.getSuperclass(), p);
}
虽然这可行,但我想可以将其缩短为:
private Field getField(Class<?> clazz, String p) { return Arrays.stream(clazz.getDeclaredFields())
.filter(f -> p.equals(f.getName()))
.findFirst()
.orElse(getField(clazz.getSuperclass(), p));
}
但是奇怪的是,该.orElse
部分似乎总是被调用。
我在这里想念什么?
回答:
方法的参数始终在调用方法之前进行求值。您想要orElseGet
带一个Supplier
仅在Optional
不存在时才被调用的:
private Field getField(Class<?> clazz, String p) { return Arrays.stream(clazz.getDeclaredFields())
.filter(f -> p.equals(f.getName()))
.findFirst()
.orElseGet(() -> getField(clazz.getSuperclass(), p));
}
以上是 Java 8的orElse无法正常工作 的全部内容, 来源链接: utcz.com/qa/408446.html