相关疑难解决方法(0)

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);
}
Run Code Online (Sandbox Code Playgroud)

虽然这有效,但我认为我可以缩短它:

private Field getField(Class<?> clazz, String p) {
    return Arrays.stream(clazz.getDeclaredFields())
            .filter(f -> p.equals(f.getName()))
            .findFirst()
            .orElse(getField(clazz.getSuperclass(), p));
}
Run Code Online (Sandbox Code Playgroud)

但奇怪的是,这.orElse部分似乎总是被称为.

我在这里错过了什么?

java optional java-8

14
推荐指数
1
解决办法
1401
查看次数

标签 统计

java ×1

java-8 ×1

optional ×1