将原始数组转换为对象并再次转回原始数组

3

我有这个

int [] abc = new int[30];

Object arr = abc;

如何将arr转换回int[]

int [] foo = (int[])arr

此外,如果arr可以指向int[]或byte[],如何区分它们?我已经检查了arr.getClass().getName()返回[I和arr.getClass().isPrimitive()为false。必须有另一种方法来检测吗?谢谢。PS:我必须在我的数组中使用原始类型。
1个回答

6

转换是正确的,(int[])arr可以解决问题。

如果需要的话,您可以通过比较类对象来识别类型:

if(arr.getClasS() == int[].class) {
    ...
}

或者更好。
if(arr instanceof int[]) {
   ...
}

[I类名是另一种方式,但在代码中不太清晰。 您也可以使用arr.getClass().getComponentType(),它应该返回int.class


回答不错,但我忍不住注意到你的“或更好”是一个(arr instanceof ...),你知道那首Gary Jules的歌。 - Captain Giraffe
我不了解你的确切使用情况,但你可能需要进行 Class.isAssignableFrom 的检查,而非 instanceof 或 equals 检查。 - Ali
@Captain:我不知道这首歌(或者之前没有听过Gary Jules的名字)。你有链接吗? - Paŭlo Ebermann
@Ebermann 《Mad World》,好歌,尽管世界依旧疯狂。YouTube上的第一个是这个。 - Captain Giraffe
@Ali:在原始类型(及其数组)之间不存在继承关系,因此 isAssignableFrom 并不是真正有用的。而且通常情况下,当你有一个对象时,最好使用 c.isInstance(o) 而不是 c.isAssignableFrom(o.getClass()) - Paŭlo Ebermann

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接