From f2992a76faad72e9c4a6cee411a6b79323a17b12 Mon Sep 17 00:00:00 2001 From: redkale Date: Tue, 17 Sep 2024 12:16:46 +0800 Subject: [PATCH] convertListFrom --- src/main/java/org/redkale/convert/ConvertFactory.java | 9 +++++++++ src/main/java/org/redkale/convert/TextConvert.java | 5 +++++ src/main/java/org/redkale/convert/bson/BsonFactory.java | 5 +++++ src/main/java/org/redkale/convert/json/JsonFactory.java | 5 +++++ .../java/org/redkale/convert/pb/ProtobufFactory.java | 5 +++++ src/main/java/org/redkale/util/TypeToken.java | 8 ++++---- .../java/org/redkale/test/scheduled/ScheduledTest.java | 6 +++++- 7 files changed, 38 insertions(+), 5 deletions(-) diff --git a/src/main/java/org/redkale/convert/ConvertFactory.java b/src/main/java/org/redkale/convert/ConvertFactory.java index 2a33d19d2..07e6d2e3e 100644 --- a/src/main/java/org/redkale/convert/ConvertFactory.java +++ b/src/main/java/org/redkale/convert/ConvertFactory.java @@ -66,6 +66,8 @@ public abstract class ConvertFactory { private final ConcurrentHashMap fieldFuncs = new ConcurrentHashMap(); + private final ConcurrentHashMap genericListTypes = new ConcurrentHashMap<>(); + private final Set skipIgnores = new HashSet(); final Set ignoreMapColumns = new HashSet(); @@ -253,6 +255,8 @@ public abstract class ConvertFactory { public abstract ConvertFactory createChild(int features); + protected abstract ConvertFactory rootFactory(); + protected SimpledCoder createEnumSimpledCoder(Class enumClass) { return new EnumSimpledCoder(this, enumClass); } @@ -372,6 +376,11 @@ public abstract class ConvertFactory { return nullable ? addFeature(Convert.FEATURE_NULLABLE) : removeFeature(Convert.FEATURE_NULLABLE); } + protected Type createGenericListType(Type componentType) { + ConcurrentHashMap map = rootFactory().genericListTypes; + return map.computeIfAbsent(componentType, t -> TypeToken.createParameterizedType(null, List.class, t)); + } + public static boolean checkTinyFeature(int features) { return (features & Convert.FEATURE_TINY) > 0; } diff --git a/src/main/java/org/redkale/convert/TextConvert.java b/src/main/java/org/redkale/convert/TextConvert.java index 9607c438a..2fb571df2 100644 --- a/src/main/java/org/redkale/convert/TextConvert.java +++ b/src/main/java/org/redkale/convert/TextConvert.java @@ -6,6 +6,7 @@ package org.redkale.convert; import java.lang.reflect.Type; +import java.util.List; /** * 文本序列化/反序列化操作类 @@ -29,6 +30,10 @@ public abstract class TextConvert extends Co public abstract T convertFrom(final Type type, final String text); + public List convertListFrom(final Type componentType, final String text) { + return (List) convertFrom(factory.createGenericListType(componentType), text); + } + /** * 序列化 * diff --git a/src/main/java/org/redkale/convert/bson/BsonFactory.java b/src/main/java/org/redkale/convert/bson/BsonFactory.java index a00a3d902..c845d735e 100644 --- a/src/main/java/org/redkale/convert/bson/BsonFactory.java +++ b/src/main/java/org/redkale/convert/bson/BsonFactory.java @@ -89,6 +89,11 @@ public final class BsonFactory extends ConvertFactory { return this; } + @Override + protected ConvertFactory rootFactory() { + return instance; + } + public static BsonFactory root() { return instance; } diff --git a/src/main/java/org/redkale/convert/json/JsonFactory.java b/src/main/java/org/redkale/convert/json/JsonFactory.java index 2f7bb2342..2bd5e438f 100644 --- a/src/main/java/org/redkale/convert/json/JsonFactory.java +++ b/src/main/java/org/redkale/convert/json/JsonFactory.java @@ -91,6 +91,11 @@ public final class JsonFactory extends ConvertFactory { return this; } + @Override + protected ConvertFactory rootFactory() { + return instance; + } + public static JsonFactory root() { return instance; } diff --git a/src/main/java/org/redkale/convert/pb/ProtobufFactory.java b/src/main/java/org/redkale/convert/pb/ProtobufFactory.java index c75d9e51e..3681e2a5e 100644 --- a/src/main/java/org/redkale/convert/pb/ProtobufFactory.java +++ b/src/main/java/org/redkale/convert/pb/ProtobufFactory.java @@ -53,6 +53,11 @@ public class ProtobufFactory extends ConvertFactory { } /** - * 动态创建 ParameterizedType + * 动态创建 ParameterizedType
+ * 例如: List<String>: createParameterizedType(null, List.class, String.class) * * @param ownerType0 ParameterizedType 的 ownerType, 一般为null * @param rawType0 ParameterizedType 的 rawType diff --git a/src/test/java/org/redkale/test/scheduled/ScheduledTest.java b/src/test/java/org/redkale/test/scheduled/ScheduledTest.java index b0d70ef24..64589dc4b 100644 --- a/src/test/java/org/redkale/test/scheduled/ScheduledTest.java +++ b/src/test/java/org/redkale/test/scheduled/ScheduledTest.java @@ -21,11 +21,15 @@ public class ScheduledTest { ScheduleManagerService manager = ScheduleManagerService.create(null); manager.init(null); ScheduledTestService service = new ScheduledTestService(); + long s = 1000 - System.currentTimeMillis() % 1000; + if (s > 0) { + Utility.sleep(s); + } manager.schedule(service); System.out.println("开始执行"); Utility.sleep(2000); manager.stop("task2"); - Utility.sleep(1001); + Utility.sleep(1010); manager.unschedule(service); manager.destroy(null); Assertions.assertEquals(3, service.count1.get());