You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2021/05/25 14:18:55 UTC
[commons-lang] 03/03: Add and use ArrayUtils.newInstance(Class,
int).
This is an automated email from the ASF dual-hosted git repository.
ggregory pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/commons-lang.git
commit 8ae6a3925ab3bcfa0450b9aa92f4d00693b4c8d2
Author: Gary Gregory <ga...@gmail.com>
AuthorDate: Tue May 25 10:18:47 2021 -0400
Add and use ArrayUtils.newInstance(Class<T>, int).
---
src/changes/changes.xml | 3 +-
.../java/org/apache/commons/lang3/ArrayUtils.java | 32 ++++++++++++++--------
.../java/org/apache/commons/lang3/Streams.java | 4 +--
.../commons/lang3/event/EventListenerSupport.java | 5 ++--
.../org/apache/commons/lang3/stream/Streams.java | 6 ++--
5 files changed, 27 insertions(+), 23 deletions(-)
diff --git a/src/changes/changes.xml b/src/changes/changes.xml
index 32c1a2e..e2b73e5 100644
--- a/src/changes/changes.xml
+++ b/src/changes/changes.xml
@@ -56,8 +56,9 @@ The <action> type attribute can be add,update,fix,remove.
<action type="add" dev="ggregory" due-to="Gary Gregory">Add and use EnumUtils.getFirstEnumIgnoreCase(Class, String, Function, E).</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add and use Suppliers.</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ArrayUtils.getComponentType(T[]).</action>
- <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ClassUtils.getComponentType(Class<T[]>).</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ClassUtils.getComponentType(Class>T[]>).</action>
<action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ObjectUtils.getClass(T).</action>
+ <action type="add" dev="ggregory" due-to="Gary Gregory">Add and use ArrayUtils.newInstance(Class>T>, int).</action>
<!-- UPDATE -->
<action type="update" dev="ggregory" due-to="Dependabot, Gary Gregory">Bump spotbugs-maven-plugin from 4.2.0 to 4.2.3 #735.</action>
<action type="update" dev="ggregory" due-to="Dependabot, XenoAmess">Bump Bump actions/cache from v2.1.4 to v2.1.5 #742, #752.</action>
diff --git a/src/main/java/org/apache/commons/lang3/ArrayUtils.java b/src/main/java/org/apache/commons/lang3/ArrayUtils.java
index 69ccfcb..9404cff 100644
--- a/src/main/java/org/apache/commons/lang3/ArrayUtils.java
+++ b/src/main/java/org/apache/commons/lang3/ArrayUtils.java
@@ -1082,9 +1082,8 @@ public class ArrayUtils {
if (array2 == null) {
return clone(array1);
}
- final Class<?> type1 = array1.getClass().getComponentType();
- @SuppressWarnings("unchecked") // OK, because array is of type T
- final T[] joinedArray = (T[]) Array.newInstance(type1, array1.length + array2.length);
+ final Class<T> type1 = getComponentType(array1);
+ final T[] joinedArray = newInstance(type1, array1.length + array2.length);
System.arraycopy(array1, 0, joinedArray, 0, array1.length);
try {
System.arraycopy(array2, 0, joinedArray, array1.length, array2.length);
@@ -3113,9 +3112,8 @@ public static int indexOf(final int[] array, final int valueToFind, int startInd
}
final Class<T> type = getComponentType(array);
- @SuppressWarnings("unchecked") // OK, because array and values are of type T
- final
- T[] result = (T[]) Array.newInstance(type, array.length + values.length);
+ final int length = array.length + values.length;
+ final T[] result = newInstance(type, length);
System.arraycopy(values, 0, result, index, values.length);
if (index > 0) {
@@ -4217,6 +4215,20 @@ public static int indexOf(final int[] array, final int valueToFind, int startInd
}
/**
+ * Delegates to {@link Array#newInstance(Class,int)} using generics.
+ *
+ * @param <T> The array type.
+ * @param type The array class.
+ * @param length the array length
+ * @return The new array.
+ * @since 3.13.0
+ */
+ @SuppressWarnings("unchecked") // OK, because array and values are of type T
+ public static <T> T[] newInstance(final Class<T> type, final int length) {
+ return (T[]) Array.newInstance(type, length);
+ }
+
+ /**
* <p>Defensive programming technique to change a {@code null}
* reference to an empty one.
*
@@ -8198,13 +8210,9 @@ public static int indexOf(final int[] array, final int valueToFind, int startInd
final int newSize = endIndexExclusive - startIndexInclusive;
final Class<T> type = getComponentType(array);
if (newSize <= 0) {
- @SuppressWarnings("unchecked") // OK, because array is of type T
- final T[] emptyArray = (T[]) Array.newInstance(type, 0);
- return emptyArray;
+ return newInstance(type, 0);
}
- @SuppressWarnings("unchecked") // OK, because array is of type T
- final
- T[] subarray = (T[]) Array.newInstance(type, newSize);
+ final T[] subarray = newInstance(type, newSize);
System.arraycopy(array, startIndexInclusive, subarray, 0, newSize);
return subarray;
}
diff --git a/src/main/java/org/apache/commons/lang3/Streams.java b/src/main/java/org/apache/commons/lang3/Streams.java
index 8e27558..1b8e125 100644
--- a/src/main/java/org/apache/commons/lang3/Streams.java
+++ b/src/main/java/org/apache/commons/lang3/Streams.java
@@ -480,9 +480,7 @@ public class Streams {
@Override
public Function<List<O>, O[]> finisher() {
return list -> {
- @SuppressWarnings("unchecked")
- final O[] array = (O[]) Array.newInstance(elementType, list.size());
- return list.toArray(array);
+ return list.toArray(ArrayUtils.newInstance(elementType, list.size()));
};
}
diff --git a/src/main/java/org/apache/commons/lang3/event/EventListenerSupport.java b/src/main/java/org/apache/commons/lang3/event/EventListenerSupport.java
index 8d51a21..1fd2281 100644
--- a/src/main/java/org/apache/commons/lang3/event/EventListenerSupport.java
+++ b/src/main/java/org/apache/commons/lang3/event/EventListenerSupport.java
@@ -282,9 +282,8 @@ public class EventListenerSupport<L> implements Serializable {
* @param classLoader the class loader to be used
*/
private void initializeTransientFields(final Class<L> listenerInterface, final ClassLoader classLoader) {
- @SuppressWarnings("unchecked") // Will throw CCE here if not correct
- final L[] array = (L[]) Array.newInstance(listenerInterface, 0);
- this.prototypeArray = array;
+ // Will throw CCE here if not correct
+ this.prototypeArray = ArrayUtils.newInstance(listenerInterface, 0);
createProxy(listenerInterface, classLoader);
}
diff --git a/src/main/java/org/apache/commons/lang3/stream/Streams.java b/src/main/java/org/apache/commons/lang3/stream/Streams.java
index cc5a6b6..cfad60c 100644
--- a/src/main/java/org/apache/commons/lang3/stream/Streams.java
+++ b/src/main/java/org/apache/commons/lang3/stream/Streams.java
@@ -16,7 +16,6 @@
*/
package org.apache.commons.lang3.stream;
-import java.lang.reflect.Array;
import java.util.ArrayList;
import java.util.Collection;
import java.util.Collections;
@@ -32,6 +31,7 @@ import java.util.stream.Collector;
import java.util.stream.Collectors;
import java.util.stream.Stream;
+import org.apache.commons.lang3.ArrayUtils;
import org.apache.commons.lang3.function.Failable;
import org.apache.commons.lang3.function.FailableConsumer;
import org.apache.commons.lang3.function.FailableFunction;
@@ -105,9 +105,7 @@ public class Streams {
@Override
public Function<List<O>, O[]> finisher() {
return list -> {
- @SuppressWarnings("unchecked")
- final O[] array = (O[]) Array.newInstance(elementType, list.size());
- return list.toArray(array);
+ return list.toArray(ArrayUtils.newInstance(elementType, list.size()));
};
}