在Java中,一个具有特定类型的数组可以通过在类型旁边添加方括号符号来初始化。
下面是一个初始化String 数组的例子:
String[] names = new String[4];
如果你想创建一个int 值的数组,那么你只需要改变String 的类型:
int[] numbers = new int[4];
知道了这些,似乎要初始化一个泛型数组,你只需要像这样输入一个泛型:
T[] names = new T[4];
但是上面的代码会产生编译错误,因为Java不知道你上面的占位符T 类型是什么意思。
构建将失败,并抛出cannot find symbol class T 错误。
当你需要一个通用数组时,你不能在初始化它时使用Java数组符号T[] 或E[] 。
相反,你需要使用ArrayList 类来初始化一个通用数组:
ArrayList elements = new ArrayList(10);
elements.add("Nathan");
elements.add(22);
elements.add(false);
elements.add(null);
System.out.println(elements);
// [Nathan, 22, false, null]
当你用ArrayList 类初始化一个泛型数组时,你可以向数组中添加任何类型的值。
另一种初始化泛型数组的方法是创建你自己的Array 类的实现,像这样初始化一个Object 类型的数组:
class Array<T> {
private final Object[] obj_array;
public final int length;
// Initialize the array in the constructor
public Array(int length) {
// instantiate a new Object array
obj_array = new Object[length];
this.length = length;
}
}
在上述Array 类的构造函数中,一个新的Object 数组被初始化,其长度被指定为构造函数的参数。
在构造函数之后,你需要定义get() 和set() 方法来设置和检索数组元素:
T get(int i) {
@SuppressWarnings("unchecked")
final T element = (T)obj_array[i];
return element;
}
void set(int i, T element) {
obj_array[i] = element;
}
现在你可以创建一个新的Array 实例,如下图所示:
// Define the Array class
class Array<T> {
private final Object[] obj_array;
public final int length;
public Array(int length) {
obj_array = new Object[length];
this.length = length;
}
T get(int i) {
@SuppressWarnings("unchecked")
final T element = (T) obj_array[i];
return element;
}
void set(int i, T element) {
obj_array[i] = element;
}
}
// Test the Array class
public class Main {
public static void main(String[] args) {
Array elements = new Array(5);
elements.set(0, "Nathan");
elements.set(1, 22);
elements.set(2, false);
System.out.println(elements.get(0)); // Nathan
System.out.println(elements.get(1)); // 22
}
}
上面的自定义Array 类的实现是非常少的,你将来可能会因为使用它而面临问题。
除非你愿意在开发应用程序时维护和改进Array 类,否则建议使用Java提供的ArrayList 类来代替。
ArrayList 有许多方法可以帮助你操作它的实例。
这就是你如何在Java中初始化一个泛型数组。
我希望这个教程对你有用。🙏