in velocity-tools-generic/src/main/java/org/apache/velocity/tools/ClassUtils.java [445:487]
public static Iterator getIterator(Object obj)
throws NoSuchMethodException, IllegalAccessException, InvocationTargetException
{
if (obj.getClass().isArray())
{
return new ArrayIterator(obj);
}
else if (obj instanceof Collection)
{
return ((Collection) obj).iterator();
}
else if (obj instanceof Map)
{
return ((Map) obj).values().iterator();
}
else if (obj instanceof Iterator)
{
return ((Iterator) obj);
}
else if (obj instanceof Iterable)
{
return ((Iterable)obj).iterator();
}
else if (obj instanceof Enumeration)
{
return new EnumerationIterator((Enumeration) obj);
}
else
{
// look for an iterator() method to support
// any user tools/DTOs that want to work in
// foreach w/o implementing the Collection interface
Method iter = obj.getClass().getMethod("iterator");
if (Iterator.class.isAssignableFrom(iter.getReturnType()))
{
return (Iterator)iter.invoke(obj);
}
else
{
return null;
}
}
}