返回后代码上的编译器错误



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

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

您在this.dialog = new ProgressDialog(this);之前有return语句,该语句成为unreachable代码,因为控件永远不会到达返回语句之后的下一个直接语句。这将导致编译错误。您需要翻转顺序,如下所示:

    for (Dialog localObject = null; ; localObject = this.dialog)
    {
       this.dialog = new ProgressDialog(this);
       return localObject;
     }

我不确定你的循环会做什么,但有一件事可以肯定它不会循环,而只是在第一次迭代本身中返回。此外,您的localObject将保持null,因为它不会到达for循环的increment块(由于返回语句,它会事先返回)。

编辑:只是为了修复您的编译错误,请将loop底部的 return 语句移动为:

    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语句,它根本不会循环。

返回后不能(或不应该)有任何代码。 它被称为"死"或"无法访问"代码。

for (Object localObject = null; ; localObject = this.dialog) {
   return localObject;
   this.dialog = new ProgressDialog(this);
}

首先,你返回 localObject,它设置为 null。不确定这是否给了你一个空指针异常,但它似乎很可疑。其次,正如 Yogendra 所说,程序永远不会到达 this.dialog = new ProgressDialog(this); 语句,因为 return 语句成为死代码之后的任何内容。

相关内容

最新更新