From 1c1c54ea8a0efbb8776436f582150f725172b57d Mon Sep 17 00:00:00 2001 From: redkale Date: Wed, 1 Feb 2023 20:34:01 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BC=98=E5=8C=96Array.newInstance?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/org/redkale/net/http/HttpRequest.java | 7 +++---- .../org/redkale/net/http/WebSocketParam.java | 16 +++++++++++----- .../java/org/redkale/source/CacheSource.java | 6 +++--- src/main/java/org/redkale/util/Creator.java | 5 ++--- 4 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/redkale/net/http/HttpRequest.java b/src/main/java/org/redkale/net/http/HttpRequest.java index c3cc6a07c..3fe80cf0a 100644 --- a/src/main/java/org/redkale/net/http/HttpRequest.java +++ b/src/main/java/org/redkale/net/http/HttpRequest.java @@ -7,7 +7,6 @@ package org.redkale.net.http; import java.io.*; import java.lang.annotation.Annotation; -import java.lang.reflect.Array; import java.net.*; import java.nio.ByteBuffer; import java.nio.charset.*; @@ -1248,9 +1247,9 @@ public class HttpRequest extends Request { */ public T[] getAnnotationsByType(Class annotationClass) { if (this.annotations == null) { - return (T[]) Array.newInstance(annotationClass, 0); + return Creator.arrayFunction(annotationClass).apply(0); } - T[] news = (T[]) Array.newInstance(annotationClass, this.annotations.length); + T[] news = Creator.arrayFunction(annotationClass).apply(this.annotations.length); int index = 0; for (Annotation ann : this.annotations) { if (ann.getClass() == annotationClass) { @@ -1258,7 +1257,7 @@ public class HttpRequest extends Request { } } if (index < 1) { - return (T[]) Array.newInstance(annotationClass, 0); + return Creator.arrayFunction(annotationClass).apply(0); } return Arrays.copyOf(news, index); } diff --git a/src/main/java/org/redkale/net/http/WebSocketParam.java b/src/main/java/org/redkale/net/http/WebSocketParam.java index 6fdd99bc4..63ce97023 100644 --- a/src/main/java/org/redkale/net/http/WebSocketParam.java +++ b/src/main/java/org/redkale/net/http/WebSocketParam.java @@ -6,8 +6,8 @@ package org.redkale.net.http; import java.lang.annotation.Annotation; -import java.lang.reflect.Array; import java.util.Arrays; +import org.redkale.util.Creator; /** * @@ -27,22 +27,28 @@ public interface WebSocketParam { default T getAnnotation(Class annotationClass) { for (Annotation ann : getAnnotations()) { - if (ann.getClass() == annotationClass) return (T) ann; + if (ann.getClass() == annotationClass) { + return (T) ann; + } } return null; } default T[] getAnnotationsByType(Class annotationClass) { Annotation[] annotations = getAnnotations(); - if (annotations == null) return (T[]) Array.newInstance(annotationClass, 0); - T[] news = (T[]) Array.newInstance(annotationClass, annotations.length); + if (annotations == null) { + return Creator.arrayFunction(annotationClass).apply(0); + } + T[] news = Creator.arrayFunction(annotationClass).apply(annotations.length); int index = 0; for (Annotation ann : annotations) { if (ann.getClass() == annotationClass) { news[index++] = (T) ann; } } - if (index < 1) return (T[]) Array.newInstance(annotationClass, 0); + if (index < 1) { + return Creator.arrayFunction(annotationClass).apply(0); + } return Arrays.copyOf(news, index); } } diff --git a/src/main/java/org/redkale/source/CacheSource.java b/src/main/java/org/redkale/source/CacheSource.java index 07755d520..94242ce48 100644 --- a/src/main/java/org/redkale/source/CacheSource.java +++ b/src/main/java/org/redkale/source/CacheSource.java @@ -6,7 +6,7 @@ package org.redkale.source; import java.io.Serializable; -import java.lang.reflect.*; +import java.lang.reflect.Type; import java.util.*; import java.util.concurrent.CompletableFuture; import org.redkale.convert.Convert; @@ -53,7 +53,7 @@ public interface CacheSource extends Resourcable { public Map mgetBytes(final String... keys); default T[] mgets(final Type componentType, final String... keys) { - T[] rs = (T[]) Array.newInstance(TypeToken.typeToClass(componentType), keys.length); + T[] rs = (T[]) Creator.arrayFunction(TypeToken.typeToClass(componentType)).apply(keys.length); Map map = mget(componentType, keys); for (int i = 0; i < keys.length; i++) { rs[i] = map.get(keys[i]); @@ -335,7 +335,7 @@ public interface CacheSource extends Resourcable { default CompletableFuture mgetsAsync(final Type componentType, final String... keys) { return mgetAsync(componentType, keys).thenApply(map -> { - T[] rs = (T[]) Array.newInstance(TypeToken.typeToClass(componentType), keys.length); + T[] rs = (T[]) Creator.arrayFunction(TypeToken.typeToClass(componentType)).apply(keys.length); for (int i = 0; i < keys.length; i++) { rs[i] = (T) map.get(keys[i]); } diff --git a/src/main/java/org/redkale/util/Creator.java b/src/main/java/org/redkale/util/Creator.java index 8e6b55c2e..1c663e124 100644 --- a/src/main/java/org/redkale/util/Creator.java +++ b/src/main/java/org/redkale/util/Creator.java @@ -802,9 +802,8 @@ public interface Creator { RedkaleClassLoader.putReflectionDeclaredConstructors(resultClazz, newDynName.replace('/', '.')); return (IntFunction) resultClazz.getDeclaredConstructor().newInstance(); } catch (Exception ex) { - //ex.printStackTrace(); //一般不会发生 - //return t -> (T[]) Array.newInstance(clazz, t); - throw new RuntimeException(ex); + //ex.printStackTrace(); //一般不会发生, native-image在没有预编译情况下会报错 + return t -> (T[]) Array.newInstance(clazz, t); } } }