java - 如何构造参数化类型的数组?

标签 java arrays types constructor

我将在这里直接讨论这个问题。 这是我到目前为止的方法:

public T[] getAllValues() {
    Serializable[] result = new Serializable[sets.size()];
    for (int i = 0; i < sets.size(); i++) {
        result[i] = sets.get(i).getValue();
    }   
    return (T[]) result;
}

'T' 是扩展 Serialized 的参数化类型。 'sets' 是一个 ArrayList,其中包含存储 String(键)和 T(值)的类型, 所以 getValue() 返回一个 T。 在这个方法中,我想返回数组中的所有 T,所以我实际上想做的看起来更像是这样:

public T[] getAllValues() {
    T[] result = new T[sets.size()];
    for (int i = 0; i < sets.size(); i++) {
        result[i] = sets.get(i).getValue();
    }
    return result;
}

因此,将可序列化数组转换为 T 数组只是一种解决方法,但不幸的是不起作用。但同时,我无法使用第二个版本,因为

new T[int];
当类型被参数化时,

显然是不可能构造的。这是为什么? 更重要的是:我该如何解决这个问题?

提前谢谢

编辑:我解决了问题,这就是我的想法:

public T[] getAllValues(T[] typearray) {
    for (int i = 0; (i < typearray.length) && (i < sets.size()); i++) {
        typearray[i] = sets.get(i).getValue();
    }
    return typearray;
}

最佳答案

一般情况下您应该避免使用数组,在这种情况下它根本不起作用。

使用List<T> (或 Set<T> )而不是数组可以解决您的所有问题。

旁白评论:
我不确定你在做什么,但似乎不是 sets包含对列表 (String, T) ,你可以有一个 Map<String, T> 。你不需要你的方法getAllValue()map.values()返回 Collections<T>全部T的。

关于java - 如何构造参数化类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689246/

相关文章:

javascript - 为什么这个 for 循环添加的嵌套对象比预期更多?

haskell - 线性类型如何防止 "duplicate"的这种实现?

MySQL 比较二进制排序规则与二进制字符串

java - 写入数据到 System.in

java - Findbugs 警告 : Equals method should not assume anything about the type of its argument

java - 如何使用curl从php页面将参数传递到java servlet?

types - Erlang 头文件 (.hrl) 中应该和不应该有什么?

java - RabbitMQ 消息丢失

python - 如何检查变量是 python 列表、numpy 数组还是 pandas 系列

arrays - 在不创建新数组的情况下反转字符数组