Interface that allows lazy/custom instantiation of input objects.
ResultList objects do not necessarily load in data all
at once. Instead, they may lazily load objects as necessary. So,
the lifespan of a ResultObjectProvider instance is
related to how the application deals with processing the
ResultList created with a given
ResultObjectProvider instance.

next

absolute

Move to the given 0-based position. This method is
only called for providers that support random access.
Return true if there is data at this position;
otherwise false. This may be invoked in place of
next().

size

reset

Reset this provider. This is an optional operation. If supported,
it should move the position of the provider to before the first
element. Non-random-access providers may be able to support this
method by re-acquiring all resources as if the result were just opened.