[英]Convert java.util.Collections to Integer array
运行代码时,出现以下错误:
Caused by: java.lang.ClassCastException: java.util.Collections$UnmodifiableSet cannot be cast to [Ljava.lang.Integer;
导致的代码是:
Integer[] selects = (Integer[]) tbl_analytes.getValue();
但是当我这样做时:
Object obj = tbl_analytes.getValue();
System.out.println(obj);
我得到以下输出:
[1,7,15]
我不明白为什么我不能将其转换为Integer[]
。 有小费吗?
Collection
接口具有将Collection
转换为数组的方法:
Object[] toArray();
要么
<T> T[] toArray(T[] a);
您不能只是将一种类型的对象强制转换为不相关的类型并期望它起作用。
打印Set产生的输出看起来像您在打印数组时获得的输出,这一事实并不意味着任何事情。
final ArrayList<Integer> integerList = new ArrayList<>();
final Integer[] integerArray = new Integer[integerList.size()];
integerList.toArray(integerArray);
看来“ tbl_analytes”是一个Set,而不是数组。 您不能转换它,必须对其进行转换:
Integer[] array = set.toArray(new Integer[0]);
您必须使用Collection接口中定义的toArray(T a[])
方法,将空的Integer[]
传递给方法。 此解决方案假定您的列表类型为List<Integer>
。 否则,这将失败。
Set<Integer> values = (Set<Integer>) tbl_analytes.getValue();
类强制转换异常给出实际的类型。 因此,最好使用一个概括(列表而不是ArrayList等)。
在Java语言中,数组是原始的。 集合不是。
由于集合是无序的,因此无法理解如何从哈希存储位置集中构建有序数组。
输出集合时,您正在该集合上调用toString方法。
所以:
当我打电话
Integer[] selects = (Integer[]) tbl_analytes.getValue();
我收到以下错误:
Caused by: java.lang.ClassCastException: java.util.Collections$UnmodifiableSet cannot be cast to [Ljava.lang.Integer;
但是当我这样做时:
Object obj = tbl_analytes.getValue();
System.out.println(obj);
我得到以下输出[1,7,15]
原因是Integer[]
完全无法从Set<Integer>
广播,但是toString
的输出来自于:
java.util.Collections $ UnmodifiableSet扩展了java.util.AbstractCollection
https://docs.oracle.com/javase/10/docs/api/java/util/AbstractCollection.html#toString()
返回此集合的字符串表示形式。 字符串表示形式包括一个集合元素的列表,这些元素按其迭代器返回的顺序排列,并括在方括号(“ []”)中。 相邻元素由字符“,”(逗号和空格)分隔。 元素通过String.valueOf(Object)转换为字符串。
那是您得到例外的原因。 此问题的解决方案在此堆栈溢出问题中得到解答:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.