以下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;
我會在if語句中加入一個print語句來驗證這段代碼是否正在使用 –
您確定if語句的計算結果爲true嗎?因爲如果它,你的代碼應該工作。這將有助於查看包含此代碼的完整方法。 – Eran