Array.newInstance
时间: 2023-07-07 19:28:19 浏览: 50
`Array.newInstance` 是 Java 中的一个方法,用于创建一个指定类型和维度的新数组。它的语法如下:
```
public static Object newInstance(Class<?> componentType, int... dimensions)
```
其中,`componentType` 参数是要创建的数组元素类型,`dimensions` 参数是一个可变长度的整数数组,用于指定数组的维度。例如,要创建一个 `int` 类型的长度为 10 的一维数组,可以使用以下代码:
```
int[] array = (int[]) Array.newInstance(int.class, 10);
```
需要注意的是,`Array.newInstance` 返回的是一个 `Object` 类型的数组对象,需要进行强制类型转换才能使用。
相关问题
blockingQueue.toArray((T[]) Array.newInstance(clazz, 0));
`blockingQueue.toArray((T[]) Array.newInstance(clazz, 0))` 是一种获取 `BlockingQueue` 中所有元素的常见方式之一。它的原理是将 `BlockingQueue` 中的所有元素复制到一个数组中,并返回该数组。
这种方式的优点是可以直接将元素转化成数组,非常简便。同时,由于 `BlockingQueue` 是线程安全的队列,因此在多线程环境下也能保证数据的正确性。但是,这种方式的缺点是需要额外的空间来存储数组,可能会导致内存浪费。
下面是一个使用 `blockingQueue.toArray((T[]) Array.newInstance(clazz, 0))` 的示例代码:
```java
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
public class Main {
public static void main(String[] args) {
BlockingQueue<Integer> queue = new ArrayBlockingQueue<>(10);
for (int i = 0; i < 10; i++) {
queue.add(i);
}
Integer[] arr = queue.toArray(new Integer[0]);
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
}
}
```
在上面的代码中,我们创建了一个 `ArrayBlockingQueue` 对象,并向队列中添加了 10 个元素。然后,我们使用 `blockingQueue.toArray(new Integer[0])` 将 `BlockingQueue` 中的所有元素转换成数组,并遍历数组中的每个元素,将其输出到控制台上。
this.arr = (T[])Array.newInstance(cls, size);解释
这是一个通过反射创建泛型数组的示例。首先,`Array.newInstance(cls, size)`会创建一个新的、具有 `cls` 类型和 `size` 大小的数组对象。然后,`(T[])`将其强制类型转换成泛型类型 `T` 的数组对象,并将其赋值给 `this.arr`。这种方式可以避免使用具体类型的数组,而是使用泛型类型的数组,从而提高代码的灵活性和通用性。需要注意的是,这种方式只适用于创建新的数组,不能用于修改已有的数组。