在以下代码中:
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。
实际上,我丢失了我的源代码。我反编译了这段代码,并得到了这个错误。
答案 0 :(得分:1)
我相信你的问题就在这一行:
Object localObject = new int[16];
此处,您声明localObject
有静态类型Object
。虽然它实际上是指int
的数组,但编译器只会记住它的类型是Object
。因此,当你说
localObject[0] = -1;
等,编译器只记得localObject
是Object
,而不是int[]
。也就是说,它不知道它不是指String
或HashSet<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中获取所需的元素。
希望这个答案有所帮助!