返回后代码编译器错误

时间:2012-12-02 02:36:45

标签: java compilation return

我在以下代码(代码段)上遇到编译器错误。为什么这段代码不正确?解决方案

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);
 }
}

3 个答案:

答案 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);语句。