MapMultiValueType.java

package com.alibaba.fastjson2.util;

import com.alibaba.fastjson2.JSONObject;

import java.lang.reflect.Type;
import java.util.HashMap;
import java.util.Map;

/**
 * @since 2.0.34
 */
public class MapMultiValueType<T extends Map>
        implements Type {
    private final Class<T> mapType;
    private final Map<String, Type> valueTypes = new HashMap<>();

    MapMultiValueType(Class<T> mapType, String name, Type type) {
        this.mapType = mapType;
        this.valueTypes.put(name, type);
    }

    MapMultiValueType(Class<T> mapType, Map<String, Type> types) {
        this.mapType = mapType;
        this.valueTypes.putAll(types);
    }

    public Class<T> getMapType() {
        return mapType;
    }

    public Type getType(String name) {
        return this.valueTypes.get(name);
    }

    public static MapMultiValueType<JSONObject> of(String name, Type type) {
        return new MapMultiValueType<>(JSONObject.class, name, type);
    }

    public static MapMultiValueType<JSONObject> of(Map<String, Type> types) {
        return new MapMultiValueType<>(JSONObject.class, types);
    }

    public static <T extends Map> MapMultiValueType<T> of(
            Class<T> mapType,
            String name,
            Type type
    ) {
        return new MapMultiValueType<>(mapType, name, type);
    }

    public static <T extends Map> MapMultiValueType<T> of(
            Class<T> mapType,
            Map<String, Type> types
    ) {
        return new MapMultiValueType<>(mapType, types);
    }
}