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 4353fc3b..b51d4da8 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/MapCodec.java @@ -19,6 +19,7 @@ import org.bson.codecs.Codec; import org.bson.codecs.DecoderContext; import org.bson.codecs.EncoderContext; +import java.lang.reflect.Modifier; import java.util.HashMap; import java.util.Map; import java.util.function.Function; @@ -62,7 +63,7 @@ public class MapCodec implements Codec> { @Override public Map decode(BsonReader reader, DecoderContext context) { - var map = getInstance(); + var map = newInstance(); reader.readStartDocument(); while (BsonType.END_OF_DOCUMENT != reader.readBsonType()) { K key = keyDecodeFunction.apply(reader.readName()); @@ -83,8 +84,8 @@ public class MapCodec implements Codec> { return encoderClass; } - private Map getInstance() { - if (encoderClass.isInterface()) { + private Map newInstance() { + if (encoderClass.isInterface() || Modifier.isAbstract(encoderClass.getModifiers())) { return new HashMap<>(); } return ReflectionUtils.newInstance(encoderClass);