Class ObjectTraversal


  • @API(status=EXPERIMENTAL)
    public final class ObjectTraversal
    extends java.lang.Object
    Allows to recursively iterate all members of an actual object. Each member is wrapped into a ObjectMember instance from which it can be read/modified. How members are discovered is defined by the ObjectMembers strategy interface.

    Regardless of the used strategy, certain types are always handled specially when discovered while iterating an object's members:

    • We never recurse into types of the packages java.* or javax.*
    • As such, we never recurse into primitive wrappers
    • When discovering a Collection type, an Iterable type or an array type, we do not recurse into the actual type but iterate the contained elements instead

    The actual order of traversal is undefined but deterministic.

    Traversal gracefully handles cycles within the object graph. Every actual encountered object instance is only visited once, regardless of how often it is referenced within the object graph.

    Author:
    Simon Taddiken
    See Also:
    ObjectMember, ObjectMembers
    • Constructor Detail

      • ObjectTraversal

        public ObjectTraversal()
    • Method Detail

      • members

        public static java.util.stream.Stream<ObjectMember> members​(java.lang.Object root,
                                                                    ObjectMembers strategy)
        Creates a lazily populated Stream of object members that are recursively reachable from the given root object.
        Parameters:
        root - Root object from which members shall be discovered - may be null.
        strategy - Strategy for discovering members. Can be obtained from static factories in ObjectMembers itself.
        Returns:
        Stream of members.