【发布时间】:2019-07-29 21:14:14
【问题描述】:
我想创建一个对数组执行不同方法的类(数组)。到目前为止,我所拥有的是不同类型数组(整数、字符串等)的重载构造函数。但是这个类还需要创建一个类数组,那么我怎样才能传入一个类名并让我的 Array 类创建一个该类的数组呢?
我可以将它硬编码到我知道我将制作一个数组的类中,但我想让我的 Array 类具有足够的通用性,以便在我将来制作的任何类中使用它。
【问题讨论】:
我想创建一个对数组执行不同方法的类(数组)。到目前为止,我所拥有的是不同类型数组(整数、字符串等)的重载构造函数。但是这个类还需要创建一个类数组,那么我怎样才能传入一个类名并让我的 Array 类创建一个该类的数组呢?
我可以将它硬编码到我知道我将制作一个数组的类中,但我想让我的 Array 类具有足够的通用性,以便在我将来制作的任何类中使用它。
【问题讨论】:
你可以这样做:
public class Array<T> {
private final T[] arr;
public Array(final int size, final Class<T> clazz) {
this.arr = createArray(size, clazz);
}
private T[] createArray(final int size, final Class<T> clazz) {
return (T[]) java.lang.reflect.Array.newInstance(clazz, size);
}
}
您可以通过以下方式调用实例化:
final Array<String> strings = new Array<>(5, String.class);
我还会为您的类建议一个不同的名称,因为 Java API 已经使用了 Array。
【讨论】:
正如@andresp 所说,您可以使用数组作为私有字段创建一个新类。除了类型参数之外,另一个避免将Class<T> 作为参数传递的选项是将数组替换为java.util.ArrayList,它的功能与数组一样,但有一些不同。
例如:
public class MyArray {
private final java.util.ArrayList arr;
public MyArray(java.util.ArrayList arr) {
this.arr = arr;
}
// Add your additional methods here.
}
【讨论】: