From 0cafa52a9d8976d129b422d76c41380340f6dbc1 Mon Sep 17 00:00:00 2001 From: godotg Date: Mon, 17 Jun 2024 15:05:58 +0800 Subject: [PATCH] chore[orm]: simplify the code --- .../java/com/zfoo/orm/codec/BaseTypeEnum.java | 66 +++++++++++-------- .../zfoo/orm/codec/BaseTypeKeyMapCodec.java | 4 +- .../orm/codec/basetype/DoubleMapCodec.java | 2 +- .../orm/codec/basetype/ShortMapCodec.java | 2 +- 4 files changed, 42 insertions(+), 32 deletions(-) diff --git a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java b/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java index 0f2c6d83..db0a42ac 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java +++ b/orm/src/main/java/com/zfoo/orm/codec/BaseTypeEnum.java @@ -2,52 +2,62 @@ package com.zfoo.orm.codec; import com.zfoo.orm.codec.basetype.*; +import java.io.Serializable; +import java.util.Arrays; +import java.util.Map; +import java.util.stream.Collectors; + /** * 基础类型枚举 * @Author:lqh * @Date:2024/6/17 11:41 */ -@SuppressWarnings({"rawtypes", "unchecked"}) public enum BaseTypeEnum { - Float(java.lang.Float.class, new FloatMapCodec()), - Integer(java.lang.Integer.class, new IntMapCodec()), - Double(java.lang.Double.class, new DoubleMapCodec()), - Character(java.lang.Character.class, new CharacterMapCodec()), - Byte(java.lang.Byte.class, new ByteMapCodec()), - Boolean(java.lang.Boolean.class, new BooleanMapCodec()), - Long(java.lang.Long.class, new LongMapCodec()), - Short(java.lang.Short.class, new ShortMapCodec()), + + Character(Character.class, new CharacterMapCodec()), + + Boolean(Boolean.class, new BooleanMapCodec()), + + Byte(Byte.class, new ByteMapCodec()), + + Short(Short.class, new ShortMapCodec()), + + Integer(Integer.class, new IntMapCodec()), + + Long(Long.class, new LongMapCodec()), + + Float(Float.class, new FloatMapCodec()), + + Double(Double.class, new DoubleMapCodec()), + ; - private final MapKeyCodec mapKeyCodec; private final Class clazz; - BaseTypeEnum(Class clazz, MapKeyCodec mapKeyCodec) { + private final MapKeyCodec mapKeyCodec; + + + BaseTypeEnum(Class clazz, MapKeyCodec mapKeyCodec) { this.clazz = clazz; this.mapKeyCodec = mapKeyCodec; } - public MapKeyCodec getMapKeyCodec() { - return mapKeyCodec; - } + public static final Map, MapKeyCodec> baseTypeMap = Arrays.stream(values()).collect(Collectors.toMap(BaseTypeEnum::getClazz, BaseTypeEnum::getMapKeyCodec)); + public Class getClazz() { return clazz; } - public static boolean containsKeyType(Class keyClass){ - for (BaseTypeEnum typeEnum : values()) { - if (typeEnum.getClazz() == keyClass) { - return true; - } - } - return false; + + public MapKeyCodec getMapKeyCodec() { + return mapKeyCodec; } - public static MapKeyCodec getCodec(Class clazz) { - for (BaseTypeEnum typeEnum : values()) { - if (typeEnum.getClazz() == clazz) { - return typeEnum.getMapKeyCodec(); - } - } - return null; + + public static boolean containsKeyType(Class keyClass){ + return baseTypeMap.containsKey(keyClass); + } + + public static MapKeyCodec getCodec(Class clazz) { + return baseTypeMap.get(clazz); } } diff --git a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java index 39dd579b..5cc6b3d4 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/BaseTypeKeyMapCodec.java @@ -34,7 +34,7 @@ public class BaseTypeKeyMapCodec implements Codec> { for (var entry : map.entrySet()) { var key = entry.getKey(); var value = entry.getValue(); - MapKeyCodec codec = BaseTypeEnum.getCodec(keyCodec.getEncoderClass()); + MapKeyCodec codec = (MapKeyCodec) BaseTypeEnum.getCodec(keyCodec.getEncoderClass()); String keyValue = codec.encode(key); writer.writeName(keyValue); if (value == null) { @@ -52,7 +52,7 @@ public class BaseTypeKeyMapCodec implements Codec> { reader.readStartDocument(); var map = new HashMap(); while (!BsonType.END_OF_DOCUMENT.equals(reader.readBsonType())) { - MapKeyCodec codec = BaseTypeEnum.getCodec(keyCodec.getEncoderClass()); + MapKeyCodec codec = (MapKeyCodec) BaseTypeEnum.getCodec(keyCodec.getEncoderClass()); K key = codec.decode(reader.readName()); V value = null; if (BsonType.NULL.equals(reader.getCurrentBsonType())) { diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java index e1a69e56..9661ac4a 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/basetype/DoubleMapCodec.java @@ -6,7 +6,7 @@ import com.zfoo.orm.codec.MapKeyCodec; * @Author:lqh * @Date:2024/6/17 11:35 */ -public class DoubleMapCodec implements MapKeyCodec { +public class DoubleMapCodec implements MapKeyCodec { @Override public String encode(Double value) { diff --git a/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java b/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java index 9400d0c6..aa154dd9 100644 --- a/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java +++ b/orm/src/main/java/com/zfoo/orm/codec/basetype/ShortMapCodec.java @@ -6,7 +6,7 @@ import com.zfoo.orm.codec.MapKeyCodec; * @Author:lqh * @Date:2024/6/17 11:38 */ -public class ShortMapCodec implements MapKeyCodec { +public class ShortMapCodec implements MapKeyCodec { @Override public String encode(Short value) { return (value != null)