diff --git a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java index 2fe2c16f..0d0461c9 100644 --- a/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java +++ b/protocol/src/main/java/com/zfoo/protocol/collection/CollectionUtils.java @@ -98,6 +98,19 @@ public abstract class CollectionUtils { return size <= 0 ? new HashMap<>() : new HashMap<>(comfortableCapacity(size)); } + // 字节码增强的类型转换必须要泛型擦除,erasureList,erasureSet,erasureMap会在字节码增强的代码中调用 + public static List erasureList(int size) { + return newList(size); + } + + public static Set erasureSet(int size) { + return newSet(size); + } + + public static Map erasureMap(int size) { + return newMap(size); + } + /** * 数组初始化长度的安全上限限制,防止反序列化异常导致内存突然升高 diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceListSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceListSerializer.java index 429bf3ed..7da231ed 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceListSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceListSerializer.java @@ -67,7 +67,7 @@ public class EnhanceListSerializer implements IEnhanceSerializer { var size = "size" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("int {}={}.readInt($1);", size, EnhanceUtils.byteBufUtils)); - builder.append(StringUtils.format("List {} = CollectionUtils.newList({});", list, size)); + builder.append(StringUtils.format("List {} = CollectionUtils.erasureList({});", list, size)); var i = "i" + GenerateProtocolFile.index.getAndIncrement(); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java index a6c33238..b6893098 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceMapSerializer.java @@ -80,7 +80,7 @@ public class EnhanceMapSerializer implements IEnhanceSerializer { var size = "size" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("int {}={}.readInt($1);", size, EnhanceUtils.byteBufUtils)); - builder.append(StringUtils.format("Map {} = CollectionUtils.newMap({});", map, size)); + builder.append(StringUtils.format("Map {} = CollectionUtils.erasureMap({});", map, size)); var i = "i" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("for(int {}=0; {}<{}; {}++){", i, i, size, i)); diff --git a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceSetSerializer.java b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceSetSerializer.java index 5733f31b..d8cc7e1f 100644 --- a/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceSetSerializer.java +++ b/protocol/src/main/java/com/zfoo/protocol/serializer/enhance/EnhanceSetSerializer.java @@ -65,7 +65,7 @@ public class EnhanceSetSerializer implements IEnhanceSerializer { var size = "size" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("int {} = {}.readInt($1);", size, EnhanceUtils.byteBufUtils)); - builder.append(StringUtils.format("Set {} = CollectionUtils.newSet({});", set, size)); + builder.append(StringUtils.format("Set {} = CollectionUtils.erasureSet({});", set, size)); var i = "i" + GenerateProtocolFile.index.getAndIncrement(); builder.append(StringUtils.format("for(int {}=0; {}<{}; {}++){", i, i, size, i));