返回带有对象数组返回类型的int数组

时间:2018-04-16 00:12:13

标签: java casting

我正在做这样的事情:

public Object [] getApple() {
    return new int[4];
}

但Java编译器不允许这样做。 它说不能从int []转换为Object []。

如果我做这样的事情:

public Object  getApple() {
    return new int[4];
}

编译好。 任何人都可以解释为什么int []不能隐式地转换为Object []吗?

4 个答案:

答案 0 :(得分:3)

int s不是Object s,这就是原因。它们是原始数据类型,它们扮演特殊角色,并且不在全父 Object的类树中。

第二个示例有效,因为int[]数组本身可以解释为Object

您可以使用包装类Integer,它是Object的子类:

public Object[] getApple() {
    return new Integer[4];
}

由于自动装箱,你可以使用类似于int[]的方法。所以,如果你这样做

Integer[] values = (Integer[]) getApple();
values[1] = 5;

Java会自动将5打包到代表Integer的相应5对象中,然后将此Integer添加到数组中。

如果你这样做

int val = values[2];

Java将取消Integer对象中的值,并为int提供val,因为int的类型为int[]

请注意,自动装箱对阵列不起作用,因此Java不会自动将Integer[]转换为int。它仅适用于Integerdouble,反之亦然(类似于其他基元,如/*The following only loads the last item in the list which is Oranges.*/ for(Item i: list) { comboBox.setModel(new DefaultComboBoxModel(new String[] { i.getName()})); } 等)。

答案 1 :(得分:2)

这是因为array是Java中的Object。因此,当您尝试将int数组作为Object返回时,它被接受了。

但是,当您尝试将 int array 作为 对象数组 返回时,它将被拒绝,因为当方法返回类型期望(对象数组)时,您返回int数组(对象)。

public Object[] getApple()    //expecting (array of object) 
{  
    return new int[4];        //returning array (an object) Type mismatch!
}

如果您运行以下内容,则可以编译:

public Object[] getApple()    //expecting (array of object) 
{  
    return new int[4][4];     //returning array of array (array of object) O.K!
}

答案 2 :(得分:1)

因为你返回的是一个原始的int []数组,它不是Object []的子类型。您可以返回Integer []。

答案 3 :(得分:1)

数组具有特定类型,子类数组本身不是超类数组的子类。