@Singleton @Named(value="net.sf.mmm.util.reflect.api.ReflectionUtil") public class ReflectionUtilImpl extends ReflectionUtilLimitedImpl implements ReflectionUtil
reflection.getInstance()| Modifier and Type | Field and Description |
|---|---|
private static CharFilter |
CHAR_FILTER |
private static ReflectionUtil |
instance |
private PojoDescriptorBuilder |
pojoDescriptorBuilder |
private PojoDescriptorBuilderFactory |
pojoDescriptorBuilderFactory |
private static String |
WEB_INF_CLASSES
The prefix of resources in WAR-files.
|
CDI_NAME, NO_ANNOTATIONS, NO_TYPESNO_ARGUMENTS, NO_PARAMETERS| Constructor and Description |
|---|
ReflectionUtilImpl()
The constructor.
|
| Modifier and Type | Method and Description |
|---|---|
int |
compare(Class<?> class1,
Class<?> class2)
This method compares the given classes.
|
<T> GenericType<T> |
createGenericType(Class<T> type)
This method creates the
GenericType representing the given type. |
GenericType<?> |
createGenericType(Type type)
This method creates the
GenericType representing the given type. |
GenericType<?> |
createGenericType(Type type,
Class<?> definingType)
This method creates the
GenericType representing the given type in the context of
the given definingType. |
GenericType<?> |
createGenericType(Type type,
GenericType<?> definingType)
This method creates the
GenericType representing the given type in the context of
the given definingType. |
protected void |
doInitialize()
This method performs the actual
initialization. |
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages)
This method finds all classes that are located in the package identified by the given
packageName. |
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages,
Filter<? super String> filter)
This method finds all classes that are located in the package identified by the given
packageName. |
Set<String> |
findClassNames(String packageName,
boolean includeSubPackages,
Filter<? super String> filter,
ClassLoader classLoader)
This method finds all classes that are located in the package identified by the given
packageName. |
void |
findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet)
This method finds all classes that are located in the package identified by the given
packageName. |
protected void |
findClassNames(String packageName,
boolean includeSubPackages,
Set<String> classSet,
Filter<? super String> filter,
ClassLoader classLoader) |
Set<String> |
findResourceNames(String packageName,
boolean includeSubPackages,
Filter<? super String> filter)
This method finds all resources that are located in the package identified by the given
packageName. |
Set<String> |
findResourceNames(String packageName,
boolean includeSubPackages,
Filter<? super String> filter,
ClassLoader classLoader)
This method finds all resources that are located in the package identified by the given
packageName. |
Set<DataResource> |
findResources(String absoluteClasspath)
This method finds all resources that match to the given
absoluteClasspath. |
Set<DataResource> |
findResources(String packageName,
boolean includeSubPackages,
Filter<? super String> filter)
This method finds all resources that are located in the package identified by the given
packageName. |
Set<DataResource> |
findResources(String packageName,
boolean includeSubPackages,
Filter<? super String> filter,
ClassLoader classLoader)
This method finds all resources that are located in the package identified by the given
packageName. |
Class<?> |
getArrayClass(Class<?> componentType)
|
Class<?>[] |
getClasses(Object[] objects)
This method gets the
classes of the given objects. |
protected ClassLoader |
getDefaultClassLoader()
This method gets the default
ClassLoader to use. |
protected ClassLoader |
getDefaultClassLoader(Class<?> fallbackClass)
This method gets the default
ClassLoader to use. |
protected Type |
getGenericDeclaration(Class<?> ancestor,
Class<?> descendant)
This method walks up the
Class-hierarchy from descendant up to ancestor and
returns the sub-class or sub-interface of ancestor on that hierarchy-path. |
static ReflectionUtil |
getInstance()
This method gets the singleton instance of this
ReflectionUtil. |
Method |
getParentMethod(Class<?> inheritingClass,
String methodName,
Class<?>[] parameterTypes)
This method gets the method
identified by
methodName and parameterTypes that is NOT declared but inherited by the given declaringClass. |
Method |
getParentMethod(Method method)
This method gets the parent method of the given
method. |
protected PojoDescriptorBuilder |
getPojoDescriptorBuilder() |
protected PojoDescriptorBuilderFactory |
getPojoDescriptorBuilderFactory() |
<T> T |
getStaticField(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit)
|
<T> T |
getStaticFieldOrNull(Class<?> type,
String fieldName,
Class<T> fieldType,
boolean exactTypeMatch,
boolean mustBeFinal,
boolean inherit) |
protected Class<?> |
getSubClass(Class<?> ancestor,
Class<?> descendant)
This method walks up the
Class-hierarchy from descendant up to ancestor and
returns the sub-class or sub-interface of ancestor on that hierarchy-path. |
boolean |
isMarkerInterface(Class<?> interfaceClass)
This method determines if the given
interfaceClass is a marker-interface (e.g. |
Set<Class<?>> |
loadClasses(Collection<String> qualifiedClassNames)
This method loads the classes given as
Collection of fully qualified
names by qualifiedClassNames and returns them as Set. |
Set<Class<?>> |
loadClasses(Collection<String> classNames,
ClassResolver classResolver,
Filter<? super Class<?>> filter)
This method loads the classes given as
Collection of names by classNames using the
given classResolver. |
Set<Class<?>> |
loadClasses(Collection<String> qualifiedClassNames,
Filter<? super Class<?>> filter)
|
void |
setPojoDescriptorBuilder(PojoDescriptorBuilder pojoDescriptorBuilder) |
void |
setPojoDescriptorBuilderFactory(PojoDescriptorBuilderFactory pojoDescriptorBuilderFactory) |
String |
toString(Type type)
This method gets the string representation of a
Type. |
void |
toString(Type type,
Appendable appendable,
Visitor<Class<?>> classFormatter)
This method gets the string representation of a
Type. |
private Type |
toType(CharSequenceScanner parser,
ClassResolver resolver,
Type owner)
This method parses the given
type as generic Type. |
Type |
toType(String type)
|
Type |
toType(String type,
ClassResolver resolver)
|
void |
visitObjectRecursive(Object object,
Filter<Object> visitor)
This method recursively traverses all objects starting from the given
Object via all properties
and contents. |
void |
visitObjectRecursive(Object object,
Filter<Object> visitor,
boolean loopProtection)
This method recursively traverses all objects starting from the given
Object via all properties
and contents. |
protected void |
visitObjectRecursive(Object object,
Filter<Object> visitor,
Set<HashKey<Object>> visitedSet) |
void |
visitResourceNames(String packageName,
boolean includeSubPackages,
ClassLoader classLoader,
ResourceVisitor visitor)
This method does the actual magic to locate resources on the classpath.
|
private static void |
visitResources(File packageDirectory,
StringBuilder qualifiedNameBuilder,
int qualifiedNamePrefixLength,
ResourceVisitor visitor)
This method scans the given
packageDirectory recursively for resources. |
getNonPrimitiveTypecreateLogger, getLoggerdoInitialized, getInitializationState, initializeclone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitgetNonPrimitiveTypeprivate static final String WEB_INF_CLASSES
private static ReflectionUtil instance
getInstance()private static final CharFilter CHAR_FILTER
private PojoDescriptorBuilderFactory pojoDescriptorBuilderFactory
getPojoDescriptorBuilderFactory()private PojoDescriptorBuilder pojoDescriptorBuilder
getPojoDescriptorBuilder()public static ReflectionUtil getInstance()
ReflectionUtil. Cdi.GET_INSTANCE before using.protected void doInitialize()
initialization. It is called when
AbstractComponent.initialize() is invoked for the first time. super.AbstractComponent.doInitialize().doInitialize in class AbstractLoggableComponentprotected PojoDescriptorBuilderFactory getPojoDescriptorBuilderFactory()
PojoDescriptorBuilderFactory.@Inject public void setPojoDescriptorBuilderFactory(PojoDescriptorBuilderFactory pojoDescriptorBuilderFactory)
pojoDescriptorBuilderFactory - is the instance of PojoDescriptorBuilderFactory to Inject.protected PojoDescriptorBuilder getPojoDescriptorBuilder()
PojoDescriptorBuilder.public void setPojoDescriptorBuilder(PojoDescriptorBuilder pojoDescriptorBuilder)
pojoDescriptorBuilder - is the PojoDescriptorBuilder to set.public Class<?>[] getClasses(Object[] objects)
classes of the given objects.getClasses in interface ReflectionUtilobjects - is an array containing the objects for that the classes are requested.class of the object from the given array at the same position or
null, if that object is null.public <T> GenericType<T> createGenericType(Class<T> type)
GenericType representing the given type. type, lower bound and
upper bound of the returned GenericType will all be
identical to the given type. Type where the given type was
defined you should use
GenericTypeFactory.createGenericType(Type, GenericType) instead to get a more precise result. createGenericType in interface GenericTypeFactorycreateGenericType in class ReflectionUtilLimitedImplT - is the generic type of the Class to convert.type - is the Type to represent.GenericType.public GenericType<?> createGenericType(Type type)
GenericType representing the given type. type is a Class, the methods behaves like
GenericTypeFactory.createGenericType(Class). Type where the given type was defined (e.g. the Class where
you retrieved the given type from as parameter, return-type or field-type) you should use
GenericTypeFactory.createGenericType(Type, GenericType) instead to get a more precise result.createGenericType in interface GenericTypeFactorycreateGenericType in class ReflectionUtilLimitedImpltype - is the Type to represent.GenericType.public GenericType<?> createGenericType(Type type, GenericType<?> definingType)
GenericType representing the given type in the context of
the given definingType. Now if you ask your self why all this instead of just usingReflectionUtilutil =getInstance(); Class<?> myClass = getSomeClass(); GenericType definingType = util.createGenericType(myClass);MethodmyMethod = findSomeMethod(myClass); Type returnType = myMethod.getGenericReturnType(); GenericType type = util.createGenericType(returnType, definingType); Class<?> returnClass = type.GenericType.getRetrievalClass();
myMethod.getReturnType() ? Read the javadoc
of GenericType to get the answer. mmm-util-pojo which allows to use this features at a higher level and
therefore much easier.createGenericType in interface GenericTypeFactorycreateGenericType in class ReflectionUtilLimitedImpltype - is the Type to represent.definingType - is the GenericType where the given type is defined in. It is
needed to resolve TypeVariables.GenericType.GenericTypeFactory.createGenericType(Type, Class)public GenericType<?> createGenericType(Type type, Class<?> definingType)
GenericType representing the given type in the context of
the given definingType. createGenericType(type,
createGenericType(definingType))createGenericType in interface GenericTypeFactorycreateGenericType in class ReflectionUtilLimitedImpltype - is the Type to represent.definingType - is the Class where the given type is defined in. It is needed to
resolve TypeVariables.GenericType.protected Class<?> getSubClass(Class<?> ancestor, Class<?> descendant)
Class-hierarchy from descendant up to ancestor and
returns the sub-class or sub-interface of ancestor on that hierarchy-path. ancestor is an interface, the hierarchy may NOT be
unique. In such case it will be unspecified which of the possible paths is used.ancestor - is the super-class or super-interface of descendant.descendant - is the sub-class or sub-interface of ancestor.descendant up to
ancestor.protected Type getGenericDeclaration(Class<?> ancestor, Class<?> descendant)
Class-hierarchy from descendant up to ancestor and
returns the sub-class or sub-interface of ancestor on that hierarchy-path. ancestor is an interface, the hierarchy may NOT be
unique. In such case it will be unspecified which of the possible paths is used.ancestor - is the super-class or super-interface of descendant.descendant - is the sub-class or sub-interface of ancestor.descendant up to
ancestor.public Class<?> getArrayClass(Class<?> componentType)
getArrayClass in interface ReflectionUtilcomponentType - is the component type .array-class.public Type toType(String type)
toType in interface ReflectionUtiltype - is the string representation of the requested type.ReflectionUtil.toType(String, ClassResolver)public Type toType(String type, ClassResolver resolver)
toType in interface ReflectionUtiltype - is the string representation of the requested type.resolver - is used to resolve classes.private Type toType(CharSequenceScanner parser, ClassResolver resolver, Type owner)
type as generic Type. StringParser but we want to avoid the dependency on
util-misc.parser - is the string-parser on the type string to parse.resolver - is used to resolve classes.owner - is the owner-type or null.public String toString(Type type)
Type. Instead of
Type.toString() it returns Class.getName() if the type is a Class.toString in interface ReflectionUtiltype - is the type to get as string.type.public void toString(Type type, Appendable appendable, Visitor<Class<?>> classFormatter)
Type. Instead of
Type.toString() it returns Class.getName() if the type is a Class.toString in interface ReflectionUtiltype - is the type to get as string.appendable - is where to append the string representation
to.classFormatter - is a Visitor that gets called for each Class and has to
append as string-representation of the visited
Class to the appendable.public int compare(Class<?> class1, Class<?> class2)
compare in interface ReflectionUtilclass1 - is the first class.class2 - is the second class.0 if both classes are equal to each other.1 if class1 inherits from class2.-1 if class2 inherits from class1.Integer.MIN_VALUE otherwise.public boolean isMarkerInterface(Class<?> interfaceClass)
interfaceClass is a marker-interface (e.g.
Serializable or Cloneable). A marker-interface is also called a
tagging-interface.isMarkerInterface in interface ReflectionUtilinterfaceClass - is the Class reflecting the interface to check.true if the given interfaceClass is a marker-interface,
false otherwise (if regular interface or no interface at all).public <T> T getStaticField(Class<?> type, String fieldName, Class<T> fieldType, boolean exactTypeMatch, boolean mustBeFinal, boolean inherit) throws NoSuchFieldException, IllegalAccessException, IllegalArgumentException
getStaticField in interface ReflectionUtilT - the templated type the requested field is assigned to.type - is the class or interface containing the requested field.fieldName - is the name of the requested field.fieldType - is the type the requested field is assigned to. Therefore the field declaration (!) must
be assignable to this type.exactTypeMatch - - if true, the fieldType must match exactly the type of
the static field, else if false the type of the field may be a sub-type of
fieldType or one of the types may be primitive while the
other is the according object-type.mustBeFinal - - if true, an IllegalArgumentException is thrown if the specified
static field exists but is NOT final,
false otherwise.inherit - if true the field may be inherited from a super-class or super-interface of type, else if
false the field is only accepted if it is declared in type.NoSuchFieldException - if the given type has no field with the given
fieldName.IllegalAccessException - if you do not have permission to read the field (e.g. field is private).IllegalArgumentException - if the field is NOT static (or final) or has the wrong type.public <T> T getStaticFieldOrNull(Class<?> type, String fieldName, Class<T> fieldType, boolean exactTypeMatch, boolean mustBeFinal, boolean inherit) throws IllegalArgumentException
getStaticFieldOrNull in interface ReflectionUtilT - the templated type the requested field is assigned to.type - is the class or interface containing the requested field.fieldName - is the name of the requested field.fieldType - is the type the requested field is assigned to. Therefore the field declaration (!) must
be assignable to this type.exactTypeMatch - - if true, the fieldType must match exactly the type of
the static field, else if false the type of the field may be a sub-type of
fieldType or one of the types may be primitive while the
other is the according object-type.mustBeFinal - - if true, an IllegalArgumentException is thrown if the specified
static field exists but is NOT final,
false otherwise.inherit - if true the field may be inherited from a super-class or super-interface of type, else if
false the field is only accepted if it is declared in type.null if the field does NOT exist or is
NOT accessible.IllegalArgumentException - if the field is NOT static (or final) or has the wrong type.public Method getParentMethod(Method method) throws SecurityException
method. The parent method is the method
overridden (is the sense of Override) by the given method or directly inherited from
an interface.getParentMethod in interface ReflectionUtilmethod - is the method.null if no such method exists.SecurityException - if access has been denied by the SecurityManager.public Method getParentMethod(Class<?> inheritingClass, String methodName, Class<?>[] parameterTypes) throws SecurityException
identified by
methodName and parameterTypes that is NOT declared but inherited by the given declaringClass.getParentMethod in interface ReflectionUtilinheritingClass - is the class inheriting the requested method.methodName - is the name of the requested method.parameterTypes - is the signature of the requested method.null if no such method exists.SecurityException - if access has been denied by the SecurityManager.ReflectionUtil.getParentMethod(Class, String, Class[])private static void visitResources(File packageDirectory, StringBuilder qualifiedNameBuilder, int qualifiedNamePrefixLength, ResourceVisitor visitor)
packageDirectory recursively for resources.packageDirectory - is the directory representing the Package.qualifiedNameBuilder - is a StringBuilder containing the qualified prefix (the Package with a
trailing dot).qualifiedNamePrefixLength - the length of the prefix used to rest the string-builder after reuse.visitor - is the ResourceVisitor.public Set<String> findClassNames(String packageName, boolean includeSubPackages)
packageName. findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.Set with the fully qualified names of all requested classes.public void findClassNames(String packageName, boolean includeSubPackages, Set<String> classSet)
packageName. findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.classSet - is where to add the classes.public Set<String> findClassNames(String packageName, boolean includeSubPackages, Filter<? super String> filter)
packageName. findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the Class-names to be added to the
resulting Set. The Filter will receive fully qualified
class-names as argument (e.g. "net.sf.mmm.reflect.api.ReflectionUtil").Set with the fully qualified names of all requested classes.public Set<String> findClassNames(String packageName, boolean includeSubPackages, Filter<? super String> filter, ClassLoader classLoader)
packageName. findClassNames in interface ReflectionUtilpackageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the Class-names to be added to the
resulting Set. The Filter will receive fully qualified
class-names as argument (e.g. "net.sf.mmm.reflect.api.ReflectionUtil").classLoader - is the explicit ClassLoader to use.Set with the fully qualified names of all requested classes.protected void findClassNames(String packageName, boolean includeSubPackages, Set<String> classSet, Filter<? super String> filter, ClassLoader classLoader) throws RuntimeIoException
packageName - is the name of the Package to scan.includeSubPackages - - if true all sub-packages of the specified Package will be included
in the search.classSet - is where to add the classes.filter - is used to filter the Class-names to be added to the resulting
Set. The Filter will receive fully qualified class-names as argument
(e.g. "net.sf.mmm.reflect.api.ReflectionUtil").classLoader - is the explicit ClassLoader to use.RuntimeIoException - if the operation failed with an I/O error.findClassNames(String, boolean, Filter, ClassLoader)public Set<String> findResourceNames(String packageName, boolean includeSubPackages, Filter<? super String> filter)
packageName. findResourceNames in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and "/" are accepted as separator
(e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the resources. The Filter will
receive fully qualified classpath entries as argument (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml"). Typically you will exclude resources that end
with ".class" or only accept resources that end with ".xml".Set with the fully qualified names of all requested resources (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml").public Set<String> findResourceNames(String packageName, boolean includeSubPackages, Filter<? super String> filter, ClassLoader classLoader)
packageName. findResourceNames in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and "/" are accepted as separator
(e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the resources. The Filter will
receive fully qualified classpath entries as argument (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml"). Typically you will exclude resources that end
with ".class" or only accept resources that end with ".xml".classLoader - is the explicit ClassLoader to use.Set with the fully qualified names of all requested resources (e.g.
"net/sf/mmm/util/reflect/beans-util-reflect.xml").public Set<DataResource> findResources(String packageName, boolean includeSubPackages, Filter<? super String> filter)
packageName. findResources in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and "/" are accepted as separator
(e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the resources. Typically you will exclude
resources that end with ".class" or only accept resources that end with ".xml".Set with all requested resources.public Set<DataResource> findResources(String absoluteClasspath) throws RuntimeIoException
absoluteClasspath. Unlike
ClasspathResource.ClasspathResource(String) this method will return
all resources that with the given classpath (e.g. out of multiple JAR-files). findResources in interface ReflectionUtilabsoluteClasspath - is the absolute path to the resource. E.g.
"net/sf/mmm/util/resource/ClasspathResource.txt".Set with all requested resources.RuntimeIoException - if the operation failed with an I/O error.public Set<DataResource> findResources(String packageName, boolean includeSubPackages, Filter<? super String> filter, ClassLoader classLoader)
packageName. findResources in interface ReflectionUtilpackageName - is the name of the Package to scan. Both "." and "/" are accepted as separator
(e.g. "net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the specified Package will
be included in the search.filter - is used to filter the resources. Typically you will exclude
resources that end with ".class" or only accept resources that end with ".xml".classLoader - is the explicit ClassLoader to use.Set with all requested resources.public void visitResourceNames(String packageName, boolean includeSubPackages, ClassLoader classLoader, ResourceVisitor visitor) throws RuntimeIoException
packageName - is the name of the Package to scan. Both "." and "/" are accepted as separator (e.g.
"net.sf.mmm.util.reflect).includeSubPackages - - if true all sub-packages of the specified Package will be included
in the search.classLoader - is the explicit ClassLoader to use.visitor - is the ResourceVisitor.RuntimeIoException - if the operation failed with an I/O error.public Set<Class<?>> loadClasses(Collection<String> qualifiedClassNames)
Collection of fully qualified
names by qualifiedClassNames and returns them as Set.loadClasses in interface ReflectionUtilqualifiedClassNames - is a collection containing the qualified names of the
classes to load.Set with all loaded classes.public Set<Class<?>> loadClasses(Collection<String> qualifiedClassNames, Filter<? super Class<?>> filter)
Collection of fully qualified
names by qualifiedClassNames. It returns a Set containing only those loaded classes
that are accepted by the given filter.loadClasses in interface ReflectionUtilqualifiedClassNames - is a collection containing the qualified names of the
classes to load.filter - is used to filter the loaded classes.Set with all loaded classes that are accepted by the
given filter.public Set<Class<?>> loadClasses(Collection<String> classNames, ClassResolver classResolver, Filter<? super Class<?>> filter)
Collection of names by classNames using the
given classResolver. It returns a Set containing only those loaded classes that are
accepted by the given filter.loadClasses in interface ReflectionUtilclassNames - is a collection containing the names of the classes to load. The class names should
typically be the qualified names of the classes to load. But this may
differ depending on the classResolver.classResolver - is used to load/resolve the classes by their names.filter - is used to filter the loaded classes.Set with all loaded classes that are accepted by the
given filter.protected ClassLoader getDefaultClassLoader()
ClassLoader to use. This should be the ContextClassLoader but falls back to alternatives if no such ClassLoader is available.ClassLoader to use.protected ClassLoader getDefaultClassLoader(Class<?> fallbackClass)
ClassLoader to use. This should be the ContextClassLoader but falls back to alternatives if no such ClassLoader is available.fallbackClass - is used to retrieve a ClassLoader as fallback if the
ContextClassLoader is not available.ClassLoader to use.public void visitObjectRecursive(Object object, Filter<Object> visitor)
Object via all properties
and contents. It simply delegates to ReflectionUtil.visitObjectRecursive(Object, Filter, boolean) using
true for loopProtection.visitObjectRecursive in interface ReflectionUtilobject - is the Object to traverse recursively.visitor - is the Filter invoked for all traversed
Objects. If an Object is not accepted by this
Filter the recursion stops at this point.public void visitObjectRecursive(Object object, Filter<Object> visitor, boolean loopProtection)
Object via all properties
and contents. It supports Collections, Maps, Object
arrays, and Pojos. primitive arrays
for performance reasons. Simply realize this inside your visitor if you need it.visitObjectRecursive in interface ReflectionUtilobject - is the Object to traverse recursively.visitor - is the Filter invoked for all traversed
Objects. If an Object is not accepted by this
Filter the recursion stops at this point.loopProtection - - true to collect all visited Objects in a Set in
order to prevent infinity loops, false otherwise (to save performance if no loops are
possible for the given Object).protected void visitObjectRecursive(Object object, Filter<Object> visitor, Set<HashKey<Object>> visitedSet)
object - is the Object to traverse recursively.visitor - is the Filter invoked for all traversed Objects. If an
Object is not accepted by this Filter the recursion stops at
this point.visitedSet - is the Set where to collect all object to visit in order to prevent infinity loops or
null to disable.visitObjectRecursive(Object, Filter, boolean)Copyright © 2001–2015 mmm-Team. All rights reserved.