Solution (source code)

= Solution

A growable-array library should store its backing <Java array> and logical size in <private fields in Java>. Public methods such as `add`, `get` and `remove` can enforce bounds and keep the size consistent with the stored elements. The representation can later change without requiring clients to modify direct field accesses.

\b[The benefit is preserving invariants through encapsulation.] If clients could assign the size or replace the backing <Java array> directly, they could create negative sizes, report elements that do not exist, or modify entries without the library's checks. Accessor methods should not expose a mutable backing object indiscriminately, since a private field alone does not prevent that indirect route. Private fields also do not provide a general security boundary against privileged reflection or native code; the point here is ordinary library access discipline.