hel*_*hod 14 java optional java-8
考虑以下方法,如果字段存在,则返回字段,或者在找到字段之前递归调用自身:
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
部分似乎总是被称为.
我在这里错过了什么?
Ale*_*lex 30
在调用方法之前,始终会评估方法的参数.你想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));
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
1401 次 |
最近记录: |