From 9f009893386d2cf254a0c5f99db7eceb96356001 Mon Sep 17 00:00:00 2001 From: godotg Date: Sun, 25 Sep 2022 16:01:00 +0800 Subject: [PATCH] =?UTF-8?q?fix[enhance]:=20=E5=AD=97=E8=8A=82=E7=A0=81?= =?UTF-8?q?=E5=A2=9E=E5=BC=BA=E7=9A=84=E7=B1=BB=E5=9E=8B=E8=BD=AC=E6=8D=A2?= =?UTF-8?q?=E5=BF=85=E9=A1=BB=E8=A6=81=E6=B3=9B=E5=9E=8B=E6=93=A6=E9=99=A4?= =?UTF-8?q?=EF=BC=8CerasureList=EF=BC=8CerasureSet=EF=BC=8CerasureMap?= =?UTF-8?q?=E4=BC=9A=E5=9C=A8=E5=AD=97=E8=8A=82=E7=A0=81=E5=A2=9E=E5=BC=BA?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81=E4=B8=AD=E8=B0=83=E7=94=A8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../zfoo/protocol/collection/CollectionUtils.java | 13 +++++++++++++ .../serializer/enhance/EnhanceListSerializer.java | 2 +- .../serializer/enhance/EnhanceMapSerializer.java | 2 +- .../serializer/enhance/EnhanceSetSerializer.java | 2 +- 4 files changed, 16 insertions(+), 3 deletions(-) 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));