java - 如何在java中创建通用对象的数组

标签 java arrays exception generics

在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/

相关文章:

java - Jackson XmlMapper 将XML转换为POJO,节点文本的键是 ""

c - 在 C 中创建一个数组来保存字符数组的数组

javascript - 打印数组 JAVASCRIPT/d3 中所有项目的值

spring - @ExceptionHandler 没有被调用

java - 是什么导致了 java.lang.ArrayIndexOutOfBoundsException 以及如何防止它?

java - 读取对象时发生 StreamCorrupedException

java - java中混合数据类型的数学方程

java - 如何下载游戏更新?

c# - 按多列对 C# 中的锯齿状数组进行排序

c# - Linq to Entities/Entity Framework 删除异常