class JSONPathTypedMulti
        extends JSONPath {
    final JSONPath[] paths;
    final Type[] types;
    final String[] formats;
    final long[] pathFeatures;
    final ZoneId zoneId;

    protected JSONPathTypedMulti(
            JSONPath[] paths,
            Type[] types,
            String[] formats,
            long[] pathFeatures,
            ZoneId zoneId,
            long features
    ) {
        super(JSON.toJSONString(paths), features);
        this.types = types;
        this.paths = paths;
        this.formats = formats;
        this.pathFeatures = pathFeatures;
        this.zoneId = zoneId;
    }

    @Override
    public JSONPath getParent() {
        return paths[0].getParent();
    }

    @Override
    public boolean isRef() {
        for (JSONPath jsonPath : paths) {
            if (!jsonPath.isRef()) {
                return false;
            }
        }
        return true;
    }

    @Override
    public boolean contains(Object object) {<FILL_FUNCTION_BODY>}

    protected final boolean ignoreError(int index) {
        return pathFeatures != null
                && index < pathFeatures.length
                && (pathFeatures[index] & Feature.NullOnError.mask) != 0;
    }

    @Override
    public Object eval(Object object) {
        Object[] array = new Object[paths.length];
        for (int i = 0; i < paths.length; i++) {
            JSONPath jsonPath = paths[i];
            Object result = jsonPath.eval(object);
            try {
                array[i] = TypeUtils.cast(result, types[i]);
            } catch (Exception e) {
                if (!ignoreError(i)) {
                    throw new JSONException("jsonpath eval path, path : " + jsonPath + ", msg : " + e.getMessage(), e);
                }
            }
        }
        return array;
    }

    protected JSONReader.Context createContext() {
        JSONReader.Context context = JSONFactory.createReadContext(features);
        if (zoneId != null && zoneId != DEFAULT_ZONE_ID) {
            context.zoneId = zoneId;
        }
        return context;
    }

    @Override
    public Object extract(JSONReader jsonReader) {
        Object object = jsonReader.readAny();
        return eval(object);
    }

    @Override
    public String extractScalar(JSONReader jsonReader) {
        Object object = extract(jsonReader);
        return JSON.toJSONString(object);
    }

    @Override
    public void set(Object object, Object value) {
        throw new JSONException("unsupported operation");
    }

    @Override
    public void set(Object object, Object value, JSONReader.Feature... readerFeatures) {
        throw new JSONException("unsupported operation");
    }

    @Override
    public void setCallback(Object object, BiFunction callback) {
        throw new JSONException("unsupported operation");
    }

    @Override
    public void setInt(Object object, int value) {
        throw new JSONException("unsupported operation");
    }

    @Override
    public void setLong(Object object, long value) {
        throw new JSONException("unsupported operation");
    }

    @Override
    public boolean remove(Object object) {
        throw new JSONException("unsupported operation");
    }
}

        for (JSONPath jsonPath : paths) {
            if (jsonPath.contains(object)) {
                return true;
            }
        }
        return false;
    
<methods>public transient void arrayAdd(java.lang.Object, java.lang.Object[]) ,public static com.alibaba.fastjson2.JSONPath compile(java.lang.String) ,public static com.alibaba.fastjson2.JSONPath compile(java.lang.String, Class#RAW) ,public static boolean contains(java.lang.Object, java.lang.String) ,public abstract boolean contains(java.lang.Object) ,public boolean endsWithFilter() ,public static java.lang.Object eval(java.lang.String, java.lang.String) ,public static java.lang.Object eval(java.lang.Object, java.lang.String) ,public abstract java.lang.Object eval(java.lang.Object) ,public static java.lang.Object extract(java.lang.String, java.lang.String) ,public static transient java.lang.Object extract(java.lang.String, java.lang.String, com.alibaba.fastjson2.JSONPath.Feature[]) ,public java.lang.Object extract(java.lang.String) ,public java.lang.Object extract(byte[]) ,public java.lang.Object extract(byte[], int, int, java.nio.charset.Charset) ,public abstract java.lang.Object extract(com.alibaba.fastjson2.JSONReader) ,public void extract(com.alibaba.fastjson2.JSONReader, com.alibaba.fastjson2.reader.ValueConsumer) ,public java.lang.Integer extractInt32(com.alibaba.fastjson2.JSONReader) ,public int extractInt32Value(com.alibaba.fastjson2.JSONReader) ,public java.lang.Long extractInt64(com.alibaba.fastjson2.JSONReader) ,public long extractInt64Value(com.alibaba.fastjson2.JSONReader) ,public abstract java.lang.String extractScalar(com.alibaba.fastjson2.JSONReader) ,public void extractScalar(com.alibaba.fastjson2.JSONReader, com.alibaba.fastjson2.reader.ValueConsumer) ,public abstract com.alibaba.fastjson2.JSONPath getParent() ,public com.alibaba.fastjson2.JSONReader.Context getReaderContext() ,public com.alibaba.fastjson2.JSONWriter.Context getWriterContext() ,public boolean isPrevious() ,public abstract boolean isRef() ,public static com.alibaba.fastjson2.JSONPath of(java.lang.String) ,public static com.alibaba.fastjson2.JSONPath of(java.lang.String, java.lang.reflect.Type) ,public static transient com.alibaba.fastjson2.JSONPath of(java.lang.String, java.lang.reflect.Type, com.alibaba.fastjson2.JSONPath.Feature[]) ,public static com.alibaba.fastjson2.JSONPath of(java.lang.String[], java.lang.reflect.Type[]) ,public static transient com.alibaba.fastjson2.JSONPath of(java.lang.String[], java.lang.reflect.Type[], com.alibaba.fastjson2.JSONReader.Feature[]) ,public static transient com.alibaba.fastjson2.JSONPath of(java.lang.String[], java.lang.reflect.Type[], java.lang.String[], long[], java.time.ZoneId, com.alibaba.fastjson2.JSONReader.Feature[]) ,public static transient com.alibaba.fastjson2.JSONPath of(java.lang.String, com.alibaba.fastjson2.JSONPath.Feature[]) ,public static Map<java.lang.String,java.lang.Object> paths(java.lang.Object) ,public static java.lang.String remove(java.lang.String, java.lang.String) ,public static void remove(java.lang.Object, java.lang.String) ,public abstract boolean remove(java.lang.Object) ,public static java.lang.String set(java.lang.String, java.lang.String, java.lang.Object) ,public static java.lang.Object set(java.lang.Object, java.lang.String, java.lang.Object) ,public abstract void set(java.lang.Object, java.lang.Object) ,public transient abstract void set(java.lang.Object, java.lang.Object, com.alibaba.fastjson2.JSONReader.Feature[]) ,public static java.lang.Object setCallback(java.lang.Object, java.lang.String, Function#RAW) ,public static java.lang.Object setCallback(java.lang.Object, java.lang.String, BiFunction#RAW) ,public void setCallback(java.lang.Object, Function#RAW) ,public abstract void setCallback(java.lang.Object, BiFunction#RAW) ,public abstract void setInt(java.lang.Object, int) ,public abstract void setLong(java.lang.Object, long) ,public com.alibaba.fastjson2.JSONPath setReaderContext(com.alibaba.fastjson2.JSONReader.Context) ,public com.alibaba.fastjson2.JSONPath setWriterContext(com.alibaba.fastjson2.JSONWriter.Context) ,public final java.lang.String toString() <variables>static final com.alibaba.fastjson2.JSONReader.Context PARSE_CONTEXT,final non-sealed long features,final non-sealed java.lang.String path,com.alibaba.fastjson2.JSONReader.Context readerContext,com.alibaba.fastjson2.JSONWriter.Context writerContext