2014-07-04 54 views
0

以下Java代码在Android中无法按预期工作,无论它是使用JDK 1.6还是1.7编译的。当“if语句”被评估为true时,“found被赋值给变量mState,但是下一个语句”return ext;“没有被执行,而是执行了最后一个语句”return null;“。之前被销毁,以执行“返回null;”声明Java for-each循环内循环返回不按预期方式工作

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,并将“return null;”更改为“return ext2;”,ext2也是ge在“返回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; 
+0

我会在if语句中加入一个print语句来验证这段代码是否正在使用 –

+0

您确定if语句的计算结果为true吗?因为如果它,你的代码应该工作。这将有助于查看包含此代码的完整方法。 – Eran

回答

0

如果通过“下一条语句”return ext;“未被执行。你的意思是说,当与调试器一起步时,“当前语句”指示器进入第二个返回状态,这只是Android使用Eclipse进行调试的一个问题。

只要方法中有多个出口点,它就会显示在最后一个点上。但是,结果是正确的,您可以通过跳出调用方法并验证返回的值来检查该结果。

-1
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; 
+0

你是对的,虽然在eclipse下的跟踪似乎显示执行跳转到“return null;”,但实际的ext对象正在被正确重新调用。 这是我自己的错误;整个问题是由于ClassCastException发生在我试图返回的对象上,但是不正确的强制转换。我错误地认为null返回导致我的应用程序中止。 对我粗心的错误有很多意见。 – user3803741