由于Java泛型的实现,您不能拥有这样的代码:
public class GenSet<E> {
private E a[];
public GenSet() {
a = new E[INITIAL_ARRAY_LENGTH]; // error: generic array creation
}
}
Run Code Online (Sandbox Code Playgroud)
如何在保持类型安全的同时实现这一点?
我在Java论坛上看到了这样的解决方案:
import java.lang.reflect.Array;
class Stack<T> {
public Stack(Class<T> clazz, int capacity) {
array = (T[])Array.newInstance(clazz, capacity);
}
private final T[] array;
}
Run Code Online (Sandbox Code Playgroud)
但我真的不知道发生了什么.
这是我正在使用的代码
public class aClass<T> {
private T[] elements;
public aClass(T[] elements) {
this.elements = elements;
}
public void doSomething() {
T[] newArray = (T[]) new Object[5];
...
}
}
Run Code Online (Sandbox Code Playgroud)
我见过有人说创建像这样的数组是一个坏主意,因为它不是类型安全的.但是,每次我使用它,我都没有问题.何时创建这样的数组会导致问题?
谢谢
如何在java中创建通用项的多维数组?
考虑班级:
class A<T>
{
T t;
public A(T t) { this.t = t; }
}
Run Code Online (Sandbox Code Playgroud)
当我尝试创建一个多维数组时:
A<String>[][] array = new A<String>[2][3];
Run Code Online (Sandbox Code Playgroud)
我收到以下错误:
generic array creation
A<String>[][] array = new A<String>[2][3];
^
Run Code Online (Sandbox Code Playgroud)
我尝试了以下方法:
A<String>[][] array = (A<String>[][]) (new Object[2]3]);
Run Code Online (Sandbox Code Playgroud)
但这只是抛出: java.lang.ClassCastException
有什么问题?
(我预计人们会建议使用列表.请解释如何使用数组实现此目的.)
可能重复:
Java如何:通用阵列创建
错误:通用阵列创建
我收到此错误:
Cannot create a generic array of T
Run Code Online (Sandbox Code Playgroud)
这是我的代码(第6行的错误):
1 public class HashTable<T> {
2
3 private T[] array;
4
5 HashTable(int initSize) {
6 this.array = new T[initSize];
7 }
8 }
Run Code Online (Sandbox Code Playgroud)
我想知道为什么会出现这个错误,并且是修复它的最佳解决方案.谢谢.
更新:
我调整了我的代码,以便数组代替链接列表,但我收到一个新的错误.
这是我的错误:
Cannot create a generic array of LinkedList<T>
Run Code Online (Sandbox Code Playgroud)
这是我的代码(第六行的错误):
1 public class HashTable<T> {
2
3 private LinkedList<T>[] array;
4
5 HashTable(int initSize) {
6 this.array = new LinkedList<T>[initSize];
7 }
8 }
Run Code Online (Sandbox Code Playgroud)
这个错误是出于同样的原因吗?我只是假设我可以创建通用链表并将它们存储在数组中.
当我运行以下代码时:
class MyStack<T>
{
private T[] stack;
... private T top;
private static final int size=50;
public MyStack()
{
stack = new int[size];
top = 0;
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误
MyStack.java:18: generic array creation
stack = new T[size];
...
1 error
Run Code Online (Sandbox Code Playgroud)
什么应该是正确的代码,所以我不会得到这个错误
是否可以创建链接列表数组?或链接列表的arraylist?我一直在各地搜索,似乎得到了相互矛盾的答案.我已经看到"没有"的答案表明它无法完成,因为你无法制作一系列可以被解除引用的东西.我已经看到了"是"的答案,说明它可以完成并且它们在那里结束.
提前致谢.