考虑以下方法,如果存在该字段,则返回该字段,否则递归调用本身,直到找到该字段:
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
部分似乎总是被调用。
我错过了什么吗?