private static <T> Field<T> createCollectionEnumV(int number, String name,
            java.lang.reflect.Field f, 
            MessageFactory messageFactory, boolean allowNullElement, 
            Class<Object> genericType, final IdStrategy strategy)
    {
        final EnumIO<?> eio = strategy.getEnumIO(genericType);
        final Accessor accessor = AF.create(f);
        return new RuntimeCollectionField<T, Enum<?>>(FieldType.ENUM, number,
                name, f.getAnnotation(Tag.class), messageFactory, allowNullElement)
        {
            @Override
            protected void mergeFrom(Input input, T message) throws IOException
            {
                accessor.set(message, input.mergeObject(
                        accessor.<Collection<Enum<?>>>get(message), schema));
            }

            @Override
            protected void writeTo(Output output, T message) throws IOException
            {
                final Collection<Enum<?>> existing = accessor.get(message);
                if (existing != null)
                    output.writeObject(number, existing, schema, false);
            }

            @Override
            protected void transfer(Pipe pipe, Input input, Output output,
                    boolean repeated) throws IOException
            {
                output.writeObject(number, pipe, schema.pipeSchema, repeated);
            }

            @Override
            protected void addValueFrom(Input input,
                    Collection<Enum<?>> collection) throws IOException
            {
                collection.add(eio.readFrom(input));
            }

            @Override
            protected void writeValueTo(Output output, int fieldNumber,
                    Enum<?> value, boolean repeated) throws IOException
            {
                eio.writeTo(output, fieldNumber, repeated, value);
            }

            @Override
            protected void transferValue(Pipe pipe, Input input, Output output,
                    int number, boolean repeated) throws IOException
            {
                EnumIO.transfer(pipe, input, output, number, repeated, strategy);
            }
        };
    }
For lazy initialization called by {@link RuntimeFieldFactory}.
protostuff-runtime/src/main/java/io/protostuff/runtime/RuntimeCollectionFieldFactory.java