/** Called to create new array instances. Subclasses may override to use a * different array implementation. By default, this returns a {@link * GenericData.Array}.*/ @SuppressWarnings("unchecked") protected Object newArray(Object old, int size, Schema schema) { if (old instanceof GenericArray) { ((GenericArray)old).reset(); return old; } else if (old instanceof Collection) { ((Collection) old).clear(); return old; } else return new GenericData.Array(size, schema); }
@Test /** check that GenericArray.reset() retains reusable elements and that GenericArray.prune() cleans * them up properly. */ public void testGenericArrayPeek() { Schema elementSchema = SchemaBuilder.record("element").fields().requiredString("value").endRecord(); Schema arraySchema = Schema.createArray(elementSchema); GenericRecord record = new GenericData.Record( elementSchema ); record.put("value", "string"); GenericArray<GenericRecord> list = new GenericData.Array<GenericRecord>(1, arraySchema); list.add(record); list.reset(); assertTrue( record == list.peek() ); list.prune(); assertNull( list.peek() ); }