在java中,我想创建一个BST类的数组,它是一个通用对象。当我写的时候
box = new BST<T>[n];
它一直告诉我[无法创建BST的通用数组],所以我使用了
box = (BST<T>[]) new Object[n];
错误消失了,但是当我运行它时,我得到 ClassCastException
这是整个实现
public class hash<T> {
private BST<T> box[];
private int size;
@SuppressWarnings("unchecked")
public hash(int n){
size = n;
box = (BST<T>[]) new Object[n];
}
最佳答案
您可以通过编写来摆脱运行时异常
box = (BST<T>[]) new BST[n];
不过,您有充分的理由不应该这样做。数组和泛型不能很好地混合。数组在运行时检查其类型信息。例如,String[]
知道它是一个 String
的数组并严格维护这一点。如果你投 String[]
到Object[]
并尝试添加 Integer
您将得到 ArrayStoreException
在运行时。另一方面,泛型是使用类型删除来实现的,这意味着类型信息存在于编译时而不是运行时。如果您投 ArrayList<String>
原始ArrayList
然后添加 Integer
你根本不会得到任何异常(exception)。
我建议使用 List<BST<T>>
相反。
关于java - 如何在java中创建通用对象的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27886326/