Java 如何构造参数化类型的数组?
我将在这里直接讨论这个问题。 这是我目前采用的方法:Java 如何构造参数化类型的数组?,java,arrays,types,constructor,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; } 当类型被参数化时
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;
}
当类型被参数化时,显然不可能构造。为什么呢?
更重要的是:我如何解决这个问题
先谢谢你
编辑:我解决了这个问题,这就是我想到的:
public T[] getAllValues(T[] typearray) {
for (int i = 0; (i < typearray.length) && (i < sets.size()); i++) {
typearray[i] = sets.get(i).getValue();
}
return typearray;
}
public T[]getAllValues(T[]typearray){
对于(inti=0;(i
通常应该避免使用数组,在这种情况下它根本不起作用
使用List
(或Set
)而不是数组可以解决所有问题
旁注:我不确定您在做什么,但似乎您可以使用一个
映射,而不是一个集合
,其中包含一个对的列表(String,T)
。您不需要方法getAllValue()
,因为map.values()
返回所有T
的Collections
。您应该避免一般使用数组,在这种情况下它根本不起作用
使用List
(或Set
)而不是数组可以解决所有问题
旁注:
我不确定您在做什么,但似乎您可以使用一个映射,而不是一个集合
,其中包含一个对的列表(String,T)
。您不需要方法getAllValue()
,因为map.values()
返回所有T
的集合。简而言之:不可能创建泛型数组。请在编辑中查看@Tom关于您的解决方案:您应该避免使用输入参数作为输出。对于其他开发人员,或者对于未来的您来说,这是相当混乱的。返回相同的数组也增加了混淆。@toto2当然,我理解你的意思,但让我继续使用此解决方案的原因是,除了我没有任何其他想法之外,这是我正在制作的API中的一个次要方法,它只会被更熟练的开发人员使用,谁可能理解我的文档。不过谢谢你的想法。简言之:不可能创建通用数组。请在编辑中查看@Tom关于您的解决方案:您应该避免使用输入参数作为输出。对于其他开发人员,或者对于未来的您来说,这是相当混乱的。返回相同的数组也增加了混淆。@toto2当然,我理解你的意思,但让我继续使用此解决方案的原因是,除了我没有任何其他想法之外,这是我正在制作的API中的一个次要方法,它只会被更熟练的开发人员使用,谁可能理解我的文档。谢谢你的想法。我解决了这个问题,我使用了一个数组。我解决了这个问题,我使用了一个数组。
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;
}