简体   繁体   English

带内循环返回的Java for-each循环未按预期工作

[英]Java for-each loop with inner-loop return not working as expected

Following Java code is not working in Android as expected whether it is compiled with JDK 1.6 or 1.7. 无论是用JDK 1.6还是1.7编译,以下Java代码在Android中均无法正常工作。 When the "if statement" is evaluated true, "found is assigned to variable mState, however the next statement "return ext;" is not being executed. Instead it executed the last statement "return null;". Also mState variable seems to have being destroyed prior to execute "return null;" statement. 当“ if语句”被评估为真时,“ found被分配给了变量mState,但是下一条语句“ return ext;”并未执行。而是执行了最后一条语句“ return null;”。另外,mState变量似乎具有在执行“ return null;”语句之前被销毁。

String mState = null;
for (PacketExtension ext : packetExtensions) {
    if (elementName.equals(ext.getElementName()) && namespace.equals(ext.getNamespace()))
    {
        mState = "found";
        return ext;
     }
}
return null;

I have also try to recode as below, but also face with the same problem as before. 我也尝试过按以下方式重新编码,但也面临着与以前相同的问题。

PacketExtension ext = null;
for (Iterator<PacketExtension> iterator = packetExtensions.iterator(); iterator.hasNext(); ) {
    ext = iterator.next();
    if (elementName.equals(ext.getElementName()) && namespace.equals(ext.getNamespace())
    {
        return ext;
    }
]
return null;

The below modified code is not working either. 以下修改后的代码也不起作用。 Even if I tried to assign ext to new local variable ext2 when "if statement" is true; 即使我在“ if语句”为true的情况下尝试将ext分配给新的局部变量ext2; and change "return null;" 并更改为“返回null”; to "return ext2;", ext2 is also get destroyed before its "return ext2" and new approach is also not working. 对于“ return ext2;”,ext2也将在其“ return ext2”之前被销毁,新方法也不起作用。 Appreciate some expert advice. 赞赏一些专家的建议。

PacketExtension ext = null;
PacketExtension ext2 = null;

for (Iterator<PacketExtension> iterator = packetExtensions.iterator(); iterator.hasNext(); ) {
    ext = iterator.next();
    if (elementName.equals(ext.getElementName()) && namespace.equals(ext.getNamespace())
    {
        ext2 = ext;
        break;
    }
]
return ext2;

If by "the next statement "return ext;" is not being executed." 如果通过“下一条语句“ return ext;”未执行”。 you mean that when stepping with the debugger the "current statement" indicator goes to the second return, it's just an issue with Android debugging with Eclipse. 您的意思是,使用调试器时,“当前语句”指示器返回第二个返回值,这只是Android使用Eclipse进行调试的问题。

Whenever there is more than an exit point in a method, it will be shown on the last one. 每当一个方法中的出口点多于一个出口点时,它将显示在最后一个出口点上。 However, the result is correct, you can check that by stepping out to the caller method and verifying the returned value. 但是,结果是正确的,您可以通过跳出调用方方法并验证返回的值来进行检查。

String mState = null;
PacketExtension ext = null;

for (PacketExtension ext : packetExtensions) {
    if (elementName.equals(ext.getElementName()) && namespace.equals(ext.getNamespace()))
    {
        mState = "found";
         this.ext = ext;
        break;
    }
}
return ext;

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM