【问题标题】:cast primitive array to Object and back将原始数组转换为 Object 并返回
【发布时间】:2011-03-09 21:28:52
【问题描述】:

我有这个

int [] abc = new int[30];

Object arr = abc;

我如何将arr 转换回int[] ??即

int [] foo = (int[])arr

另外,如果arr可以指向int[]byte[],如何区分它们??

我检查了arr.getClass().getName() 返回[Iarr.getClass().isPrimitive()false。一定是另一种检测方式吗?

谢谢。

PS。我必须在我的数组中使用原始类型。

【问题讨论】:

    标签: java arrays


    【解决方案1】:

    选角是正确的,(int[])arr 成功了。

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

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

    或更好

    if(arr instanceof int[]) {
       ...
    }
    

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

    【讨论】:

    • 很好的答案,但我不禁注意到你的“或更好”是一个 (arr instanceof ...) ,你知道加里朱尔斯的歌。
    • 我不知道你的确切用例,但你可能需要做一个 Class.isAssignableFrom 而不是 instanceof 或等于检查。
    • @Captain:我不知道这首歌(或者以前听过 Gary Jules 这个名字)。有链接吗?
    • @Ebermann Mad World,很棒的歌曲,但仍然是一个疯狂的世界。首先是 Youtube。
    • @Ali:原始类型(及其数组)之间没有继承关系,因此isAssignableFrom 并不是真正有用。一般来说,当你有一个对象时,最好使用c.isInstance(o) 而不是c.isAssignableFrom(o.getClass())
    猜你喜欢
    • 1970-01-01
    • 2020-08-18
    • 2020-09-04
    • 2016-12-25
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-02-03
    相关资源
    最近更新 更多