我在以下代码(代码段)上遇到编译器错误。为什么这段代码不正确?解决方案
protected Dialog onCreateDialog(int paramInt)
{
switch (paramInt)
{
default:
case 0:
}
for (Object localObject = null; ; localObject = this.dialog)
{
return localObject; // here problem cast
this.dialog = new ProgressDialog(this);
this.dialog.setMessage(getResources().getString(2131165201));
this.dialog.setIndeterminate(true);
this.dialog.setCancelable(false);
}
}
答案 0 :(得分:2)
您在return
之前的this.dialog = new ProgressDialog(this);
语句变为unreachable
代码,因为控制将永远不会到达return语句后的下一个直接语句。 这将导致编译错误。您需要将订单翻转为:
for (Dialog localObject = null; ; localObject = this.dialog)
{
this.dialog = new ProgressDialog(this);
return localObject;
}
我不确定你的循环会做什么,但有一件事是确定它不会循环但只是在第一次迭代中返回。此外,您的localObject
将保留null
,因为它不会到达increment
循环的for
块(由于return语句,它会事先返回)。
编辑:为了解决您的编译错误,请将您的return语句移至loop
底部:
protected Dialog onCreateDialog(int paramInt)
{
switch (paramInt)
{
default:
case 0:
}
for (Dialog localObject = null; ; localObject = this.dialog)
{
this.dialog = new ProgressDialog(this);
this.dialog.setMessage(getResources().getString(2131165201));
this.dialog.setIndeterminate(true);
this.dialog.setCancelable(false);
return localObject; // here problem cast
}
}
正如我前面提到的,我没有得到使用for
循环的真正原因,因为它内部的return
语句根本不会循环。
答案 1 :(得分:1)
返回后,您不能(或不应该)拥有任何代码。它被称为“死”或“无法访问”代码。
答案 2 :(得分:1)
for (Object localObject = null; ; localObject = this.dialog) {
return localObject;
this.dialog = new ProgressDialog(this);
}
首先,您将返回localObject,该对象设置为null。不确定这是否给你一个空指针异常,但它看起来很可疑。其次,正如Yogendra所说,在返回语句变为死代码之后,程序永远不会到达this.dialog = new ProgressDialog(this);
语句。