diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java index 0e15dbc0..8801917a 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java @@ -13,6 +13,7 @@ import java.util.function.Function; /** * 基础类型作为key的map解析器 (key 默认不能为null) + * * @Author:lqh * @Date:2024/6/17 13:55 */ @@ -21,16 +22,18 @@ public class MapCodec implements Codec> { private final Class> encoderClass; private final Codec keyCodec; private final Codec valueCodec; + private final Function keyDecodeFunction; - MapCodec(final Class> encoderClass, final Codec keyCodec, final Codec valueCodec) { + @SuppressWarnings("unchecked") + MapCodec(Class> encoderClass, Codec keyCodec, Codec valueCodec) { this.encoderClass = encoderClass; this.keyCodec = keyCodec; this.valueCodec = valueCodec; + this.keyDecodeFunction = (Function) MapKeyCodecEnum.keyDecode(keyCodec.getEncoderClass()); } @Override - @SuppressWarnings({"unchecked"}) - public void encode(final BsonWriter writer, final Map map, final EncoderContext encoderContext) { + public void encode(BsonWriter writer, Map map, EncoderContext encoderContext) { writer.writeStartDocument(); for (var entry : map.entrySet()) { var key = entry.getKey(); @@ -46,12 +49,10 @@ public class MapCodec implements Codec> { } @Override - @SuppressWarnings({"unchecked"}) - public Map decode(final BsonReader reader, final DecoderContext context) { - reader.readStartDocument(); + public Map decode(BsonReader reader, DecoderContext context) { var map = new HashMap(); + reader.readStartDocument(); while (BsonType.END_OF_DOCUMENT != reader.readBsonType()) { - var keyDecodeFunction = (Function) MapKeyCodecEnum.keyDecode(keyCodec.getEncoderClass()); K key = keyDecodeFunction.apply(reader.readName()); V value = null; if (BsonType.NULL == reader.getCurrentBsonType()) { diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java b/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java index 8c9af37b..b05b6cfb 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapCodecProvider.java @@ -15,7 +15,7 @@ import java.util.Map; public class MapCodecProvider implements PropertyCodecProvider { @Override @SuppressWarnings({"rawtypes", "unchecked"}) - public Codec get(final TypeWithTypeParameters type, final PropertyCodecRegistry registry) { + public Codec get(TypeWithTypeParameters type, PropertyCodecRegistry registry) { if (!Map.class.isAssignableFrom(type.getType())) { return null; } diff --git a/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java b/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java index 2f174490..99ba5363 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapKeyCodecEnum.java @@ -31,9 +31,9 @@ public enum MapKeyCodecEnum { ; - private final Class keyType; + public final Class keyType; - private final Function keyDecodeFunction; + public final Function keyDecodeFunction; MapKeyCodecEnum(Class keyType, Function keyDecodeFunction) { @@ -41,17 +41,16 @@ public enum MapKeyCodecEnum { this.keyDecodeFunction = keyDecodeFunction; } - public static final Map, Function> keyDecodeMap = Arrays.stream(values()).collect(Collectors.toMap(MapKeyCodecEnum::getKeyType, MapKeyCodecEnum::getKeyDecodeFunction)); - - - public Class getKeyType() { + public Class keyType() { return keyType; } - public Function getKeyDecodeFunction() { + public Function keyDecodeFunction() { return keyDecodeFunction; } + public static final Map, Function> keyDecodeMap = Arrays.stream(values()).collect(Collectors.toMap(MapKeyCodecEnum::keyType, MapKeyCodecEnum::keyDecodeFunction)); + public static boolean containsKeyDecode(Class keyClass) { return keyDecodeMap.containsKey(keyClass); }