如何使用泛型声明一个映射变量,其中X 的类作为键,X 的相关序列化器作为值?
例如,一个可以包含以下内容的 Map:
K、V
BigDecimal.class、new BigDecimalSerializer()
LocalDate.class、new LocalDateSerializer()
Date.class、new DateSerializer()

    public static void main(String[] args) {

        // 使用示例
        SerializerRegistry registry = new SerializerRegistry();
        registry.registerSerializer(BigDecimal.class, new BigDecimalSerializer());
        registry.registerSerializer(LocalDate.class, new LocalDateSerializer());
        registry.registerSerializer(Date.class, new DateSerializer());

        // 获取并使用
        Serializer<BigDecimal> bdSerializer = registry.getSerializer(BigDecimal.class);
        Serializer<LocalDate> lcSerializer = registry.getSerializer(LocalDate.class);
        String result = bdSerializer.serialize(new BigDecimal("123.45"));
        String result1 = lcSerializer.serialize(LocalDate.of(2026, 1, 1));
    }
    // 定义序列化器接口
    public interface Serializer<T> {
        String serialize(T value);
    }

    // 具体实现
    public static class BigDecimalSerializer implements Serializer<BigDecimal> {
        @Override
        public String serialize(BigDecimal value) {
            return value.toString();
        }
    }

    public static class LocalDateSerializer implements Serializer<LocalDate> {
        @Override
        public String serialize(LocalDate value) {
            return value.toString();
        }
    }

    public static class DateSerializer implements Serializer<Date> {
        @Override
        public String serialize(Date value) {
            return value.toString();
        }
    }

    // 注册表
    public static class SerializerRegistry {
        private final Map<Class<?>, Serializer<?>> serializers = new HashMap<>();

        public <T> void registerSerializer(Class<T> type, Serializer<T> serializer) {
            serializers.put(type, serializer);
        }

        @SuppressWarnings("unchecked")
        public <T> Serializer<T> getSerializer(Class<T> type) {
            return (Serializer<T>) serializers.get(type);
        }
    }

在这里插入图片描述

更多推荐