表达式类型中的错误必须是数组类型,但它已解析为Object

时间:2012-02-16 04:30:14

标签: java android arrays types

在以下代码中:

public class ColorTableDialog extends Dialog
  implements View.OnClickListener
{        
    public ColorTableDialog(Context paramContext)
      {
        super(paramContext);
        requestWindowFeature(1);
        Object localObject = new int[16];
      }

      ColorTableDialog(Context paramContext)
          {
            super(paramContext);
            requestWindowFeature(1);
            Object localObject = new int[16];
            localObject[0] = -1;
            localObject[1] = -4144960;
            localObject[2] = -8355712;
            localObject[3] = -16777216;
            localObject[4] = -65536;
            localObject[5] = -8388608;
            localObject[6] = -256;
            localObject[7] = -8355840;
            localObject[8] = -16711936;
            localObject[9] = -16744448;
            localObject[10] = -16711681;
            localObject[11] = -16744320;
            localObject[12] = -16776961;
            localObject[13] = -16777088;
            localObject[14] = -65281;
            localObject[15] = -8388480;
            this.mColors = ((I)localObject);
            setContentView(main);
            localObject = (ScrollView)findViewById(main);
    }
}

我在这里得到了错误

  

错误表达式的类型必须是数组类型,但它已解析为Object。

实际上,我丢失了我的源代码。我反编译了这段代码,并得到了这个错误。

2 个答案:

答案 0 :(得分:1)

我相信你的问题就在这一行:

 Object localObject = new int[16];

此处,您声明localObject有静态类型Object。虽然它实际上是指int的数组,但编译器只会记住它的类型是Object。因此,当你说

localObject[0] = -1;

等,编译器只记得localObjectObject,而不是int[]。也就是说,它不知道它不是指StringHashSet<Integer>之类的东西,在这种情况下不允许应用括号。

要解决此问题,请将localObject的类型更改为int[],如

int[] localObject = new int[16];

这样一来,编译器就会记住它是一个int的数组,而且一切都会很好。

更一般地说,除非你有充分的理由不这样做,否则为你的变量提供尽可能具体的变量通常是个好主意。

希望这有帮助!

答案 1 :(得分:-1)

你可以使用:  ((INT [])localObject)[0] = - 1 将Objcet类型的localObject强制转换为int []类型。

由于int []类型(不是int类型)是Object类型的子类之一,并且您已将一个int []类型的数组赋予localObject,因此表达式a =(int [])localObject将从localObject(对象类型)中检索int []类型,并使用[0],您可以从数组a中获取所需的元素。

希望这个答案有所帮助!