package org.qi4j.api.util; import java.lang.reflect.Field; import java.lang.reflect.Type; import org.qi4j.functional.Function; import org.qi4j.functional.Function2; import org.qi4j.functional.Iterables; import static org.qi4j.functional.Iterables.iterable; /** * Useful methods for handling Fields. */ public final class Fields { public static final Function2<Class<?>, String, Field> FIELD_NAMED = new Function2<Class<?>, String, Field>() { @Override public Field map( Class<?> aClass, String name ) { return Iterables.first( Iterables.filter( Classes.memberNamed( name ), FIELDS_OF.map( aClass ) ) ); } }; public static final Function<Type, Iterable<Field>> FIELDS_OF = Classes.forClassHierarchy( new Function<Class<?>, Iterable<Field>>() { @Override public Iterable<Field> map( Class<?> type ) { return iterable( type.getDeclaredFields() ); } } ); }