Java 返回后代码出现编译器错误
以下代码(代码段)中出现编译器错误。为什么这个代码不正确?解决办法Java 返回后代码出现编译器错误,java,compilation,return,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 =
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=newprogressdialog(this)之前有return
语句
变得不可访问code,因为控件永远不会到达return语句之后的下一个直接语句这将导致编译错误。您需要将顺序翻转为:
for (Dialog localObject = null; ; localObject = this.dialog)
{
this.dialog = new ProgressDialog(this);
return localObject;
}
我不确定你们的循环会做什么,但有一件事是肯定的,它不会循环,只会在第一次迭代中返回。另外,您的localObject
将保持null
,因为它不会到达for
循环的increment
块(由于return语句,它会提前返回)
EDIT:为了修复编译错误,将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
语句。在返回之后不能(或不应该)有任何代码。它被称为“死”或“不可访问”代码
首先,返回localObject,它被设置为null。不确定这是否会给您一个空指针异常,但这似乎有点可疑。其次,正如约根德拉所说,程序永远不会到达this.dialog=newprogressdialog(this)返回语句变为死代码后的任何语句 你读过这条消息了吗?以后,你会一直想用你的问题发布错误消息。它通常掌握着问题的关键,就像它在本例中所做的那样,因为它告诉您(和我们)到底是什么错了。为什么循环非常奇怪?返回localObject;//这里是问题类型转换
请复制/粘贴错误,而不是对其进行解释。+1,但您缺少的关键点是,无法直接访问的代码将无法编译。@Vulcan:我明确添加了说明相同错误的消息。编译时出错,“无法从对象转换为对话框”@user1854920您的localObject
声明应为Dialog
类型,而不是Object
,即Dialog localObject=null
。我更新了答案。
for (Object localObject = null; ; localObject = this.dialog) {
return localObject;
this.dialog = new ProgressDialog(this);
}