Si consideri il seguente metodo che restituisce un campo se esiste o ricorsivamente chiama se stessa fino a quando il campo si trova:Java 8 OrElse non funziona come previsto
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);
}
Anche se questo funziona, ho pensato che avrei potuto accorciare a:
private Field getField(Class<?> clazz, String p) {
return Arrays.stream(clazz.getDeclaredFields())
.filter(f -> p.equals(f.getName()))
.findFirst()
.orElse(getField(clazz.getSuperclass(), p));
}
Ma la cosa strana è che la parte .orElse
sembra essere sempre chiamato.
Cosa mi manca qui?
Sei consapevole che se il campo non esiste, vi ha colpito una 'superclasse null' ad un certo punto? – Holger
@Holger Sì, lo so, l'ho appena lasciato fuori per semplificare il codice. – helpermethod