Java for each循环,内部循环返回未按预期工作

Java for each循环,内部循环返回未按预期工作,java,android,Java,Android,无论是用JDK1.6还是1.7编译的,下面的Java代码在Android中都无法正常工作。当if语句的计算结果为true时,found被赋值给变量mState,但是下一个语句返回ext;没有被执行。相反,它执行了最后一条语句return null;。mState变量似乎在执行返回null之前已被销毁;声明 String mState = null; for (PacketExtension ext : packetExtensions) { if (elementName.equals(

无论是用JDK1.6还是1.7编译的,下面的Java代码在Android中都无法正常工作。当if语句的计算结果为true时,found被赋值给变量mState,但是下一个语句返回ext;没有被执行。相反,它执行了最后一条语句return null;。mState变量似乎在执行返回null之前已被销毁;声明

String mState = null;
for (PacketExtension ext : packetExtensions) {
    if (elementName.equals(ext.getElementName()) && namespace.equals(ext.getNamespace()))
    {
        mState = "found";
        return ext;
     }
}
return null;
我也尝试如下重新编码,但也面临着与以前相同的问题

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;
下面修改的代码也不起作用。即使当if语句为true时,我尝试将ext赋值给新的局部变量ext2;并更改返回空值;要返回ext2;,ext2在返回ext2之前也会被销毁,新方法也不起作用。感谢专家的建议

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;
如果由下一条语句返回ext;没有被执行。您的意思是,当使用调试器单步执行时,当前语句指示器转到第二个返回,这只是Android使用Eclipse进行调试的问题


当一个方法中有多个退出点时,它将显示在最后一个退出点上。但是,结果是正确的,您可以通过跳出到调用方方法并验证返回值来检查这一点。

我会在if中放入一条print语句,以验证此代码是否正在使用。您确定if语句的计算结果为true吗?因为如果是这样的话,你的代码应该可以工作。查看包含此代码的完整方法会有所帮助。您是正确的,尽管eclipse下的跟踪似乎显示执行跳转以返回null;,但是实际的ext对象正在被正确地重新调谐。这是我自己的错误;整个问题都是由于ClassCastException发生在我试图转换的返回对象上,但转换错误。我错误地认为返回了null,导致我的应用程序中止。我犯了许多粗心的错误。
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;