static Object readObjectFrom(Input input, Schema<?> schema, Object owner,
            IdStrategy strategy) throws IOException
    {
        final int number = input.readFieldNumber(schema);
        final Object value;
        switch (number)
        {
            case ID_CLASS:
                value = strategy.resolveClassFrom(input, false, false);
                break;

            case ID_CLASS_MAPPED:
                value = strategy.resolveClassFrom(input, true, false);
                break;

            case ID_CLASS_ARRAY:
                value = ObjectSchema.getArrayClass(input, schema,
                        strategy.resolveClassFrom(input, false, true));
                break;

            case ID_CLASS_ARRAY_MAPPED:
                value = ObjectSchema.getArrayClass(input, schema,
                        strategy.resolveClassFrom(input, true, true));
                break;

            default:
                throw new ProtostuffException("Corrupt input.");
        }

        if (input instanceof GraphInput)
        {
            // update the actual reference.
            ((GraphInput) input).updateLast(value, owner);
        }

        if (0 != input.readFieldNumber(schema))
            throw new ProtostuffException("Corrupt input.");

        return value;
    }
Used when a field is declared as {@code Class<?>} (with or with-out generics).

@author David Yu
@created Apr 25, 2012
protostuff-runtime/src/main/java/io/protostuff/runtime/ClassSchema.java