请查看以下Android
代码
public void setTitles(final List<AppDataBean> appDataBeanList){
dataBeanArrayList = new ArrayList<DataBean>();
outer:for(a=0;a<appDataBeanList.size();a++)
{
appDataBeanListIndex=a;
//Get data from the Bean list
final AppDataBean appDataBean = appDataBeanList.get(a);
if (InternetConnectivity.isConnectedToInternet(context)==true){
try {
LinkReader linkReader = new LinkReader();
linkReader.onFinish(new LinkReader.OnTaskCompleted() {
@Override
public void onTaskCompleted(ArrayList<DataBean> list) {
inner:for (int i = 0; i < list.size(); i++) {
if (InternetConnectivity.isConnectedToInternet(context)== true){
//Gather all information into DataBean
DataBean dataBean = new DataBean();
dataBean.setTitle(list.get(i).getTitle());
//Add the DataBean to the bean list
dataBeanArrayList.add(dataBean);
}
if(i==4)
{
break outer;;
}
}
}
@Override
public void onError() {
}
});
}
catch(NullPointerException e)
{
e.printStackTrace();
}
}
}
}
在此处,请注意我将for循环标记为outer
和inner
的方式。在第二个循环中,我试图在满足某个条件时打破outer
循环,但它不起作用,因为它给出了编译错误&#34; undefined label: outer
&#34;。
这是为什么?我尝试将outer
内容用花括号括起来,然后覆盖inner
部分,我尝试没有花括号,同样的错误。
答案 0 :(得分:1)
break语句终止带标签的语句;它不是 将控制流转移到标签上。控制流程被转移 紧接着标签后的声明(终止) 言。
表示您不能将其视为goto
。
This帖子给出了以下示例:
first:
for( int i = 0; i < 10; i++) {
second:
for(int j = 0; j < 5; j ++ )
{
break xxx;
}
}
third:
for( int a = 0; a < 10; a++) {
}
您可以将xxx
替换为first
或second
,因为两个循环都在执行,但将xxx替换为第三个将无法编译。
现在你的情况,在这里创建了anonymous inner class
:
linkReader.onFinish(new LinkReader.OnTaskCompleted() {
@Override
public void onTaskCompleted(ArrayList<DataBean> list) {
并且你试图在这个内部类的范围内打破:
if(i==4)
{
break outer;
}
如果你将你的病情移到这个内部类的范围之外,那就可以了。