Provides a "fluent" API that makes usage of the Java Reflection API easier and improves code readability.

Here are some examples:

       // import static {@link org.fest.reflect.core.Reflection org.fest.reflect.core.Reflection}.*;

       // Loads the class 'org.republic.Jedi'
       Class<?> jediType = {@link org.fest.reflect.core.Reflection#type(String) type}("org.republic.Jedi").{@link org.fest.reflect.type.Type#load() load}();

       // Loads the class 'org.republic.Jedi' as 'org.republic.Person' (Jedi extends Person)
       Class<Person> jediType = {@link org.fest.reflect.core.Reflection#type(String) type}("org.republic.Jedi").{@link org.fest.reflect.type.Type#loadAs(Class) loadAs}(Person.class);

       // Loads the class 'org.republic.Jedi' using a custom class loader
       Class<?> jediType = {@link org.fest.reflect.core.Reflection#type(String) type}("org.republic.Jedi").{@link org.fest.reflect.type.Type#withClassLoader(ClassLoader) withClassLoader}(myClassLoader).{@link org.fest.reflect.type.TypeLoader#load() load}();

       // Gets the inner class 'Master' in the declaring class 'Jedi':
       Class<?> masterClass = {@link org.fest.reflect.core.Reflection#staticInnerClass(String) staticInnerClass}("Master").{@link org.fest.reflect.innerclass.StaticInnerClassName#in(Class) in}(Jedi.class).{@link org.fest.reflect.innerclass.Invoker#get() get}();

       // Equivalent to call 'new Person()'
       Person p = {@link org.fest.reflect.core.Reflection#constructor() constructor}().{@link org.fest.reflect.constructor.TargetType#in in}(Person.class).{@link org.fest.reflect.constructor.Invoker#newInstance(Object...) newInstance}();

       // Equivalent to call 'new Person("Yoda")'
       Person p = {@link org.fest.reflect.core.Reflection#constructor() constructor}().{@link org.fest.reflect.constructor.TargetType#withParameterTypes(Class...) withParameterTypes}(String.class).{@link org.fest.reflect.constructor.ParameterTypes#in(Class) in}(Person.class).{@link org.fest.reflect.constructor.Invoker#newInstance(Object...) newInstance}("Yoda");

       // Retrieves the value of the field "name"
       String name = {@link org.fest.reflect.core.Reflection#field(String) field}("name").{@link org.fest.reflect.field.FieldName#ofType(Class) ofType}(String.class).{@link org.fest.reflect.field.FieldType#in(Object) in}(person).{@link org.fest.reflect.field.Invoker#get() get}();

       // Sets the value of the field 'name' to "Yoda"
       {@link org.fest.reflect.core.Reflection#field(String) field}("name").{@link org.fest.reflect.field.FieldName#ofType(Class) ofType}(String.class).{@link org.fest.reflect.field.FieldType#in(Object) in}(person).{@link org.fest.reflect.field.Invoker#set(Object) set}("Yoda");

       // Equivalent to call 'jedi.getPowers()'
       List<String> powers = {@link org.fest.reflect.core.Reflection#method(String) method}("getPowers").{@link org.fest.reflect.method.MethodName#withReturnType(org.fest.reflect.reference.TypeRef) withReturnType}(new {@link org.fest.reflect.reference.TypeRef TypeRef}<List<String>>() {})
                                                .{@link org.fest.reflect.method.MethodReturnTypeRef#in(Object) in}(person)
                                                .{@link org.fest.reflect.method.Invoker#invoke(Object...) invoke}();

       // Equivalent to call 'person.setName("Luke")'
       {@link org.fest.reflect.core.Reflection#method(String) method}("setName").{@link org.fest.reflect.method.MethodName#withParameterTypes(Class...) withParameterTypes}(String.class)
                        .{@link org.fest.reflect.method.MethodParameterTypes#in(Object) in}(person)
                        .{@link org.fest.reflect.method.Invoker#invoke(Object...) invoke}("Luke");

       // Equivalent to call 'person.concentrate()'
       {@link org.fest.reflect.core.Reflection#method(String) method}("concentrate").{@link org.fest.reflect.method.MethodName#in(Object) in}(person).{@link org.fest.reflect.method.Invoker#invoke(Object...) invoke}();

       // Equivalent to call 'person.getName()'
       String name = {@link org.fest.reflect.core.Reflection#method(String) method}("getName").{@link org.fest.reflect.method.MethodName#withReturnType(Class) withReturnType}(String.class)
                                      .{@link org.fest.reflect.method.MethodReturnType#in(Object) in}(person)
                                      .{@link org.fest.reflect.method.Invoker#invoke(Object...) invoke}();

       // Equivalent to call 'Jedi.getCommonPowers()'
       List<String> powers = {@link org.fest.reflect.core.Reflection#staticMethod(String) staticMethod}("getCommonPowers").{@link org.fest.reflect.method.StaticMethodName#withReturnType(org.fest.reflect.reference.TypeRef) withReturnType}(new {@link org.fest.reflect.reference.TypeRef TypeRef}<List<String>>() {})
                                                            .{@link org.fest.reflect.method.StaticMethodReturnTypeRef#in(Class) in}(Jedi.class)
                                                            .{@link org.fest.reflect.method.Invoker#invoke(Object...) invoke}();