我有一个如下代码片段:
List<EmailTemplate> langTemplates = emailTemplateMap.get(categoryId+"_"+languageId);
while (langTemplates.isEmpty() && altLanguageId <= Language.ALL.length)
{
langTemplates = emailTemplateMap.get(categoryId+"_"+altLanguageId);
altLanguageId++;
}
不能按预期工作。我发现(反编译.class文件),编译器显然将其更改为:
List langTemplates;
for(langTemplates = (List)emailTemplateMap.get((new StringBuilder(String.valueOf(categoryId))).append("_").append(languageId).toString()); langTemplates.isEmpty() && altLanguageId <= Language.ALL.length; altLanguageId++)
{
langTemplates = (List)emailTemplateMap.get((new StringBuilder(String.valueOf(categoryId))).append("_").append(altLanguageId).toString());
}
这是不一样的。它只是替换了我正在运行的转义变量(幸运的是我得到了第二个,否则这将成为一个无限循环!),它被定义为循环之前,因此总是检查相同的值,并没有考虑更新/重新引用循环内的局部变量。
这有什么意义吗?或者这可以被认为是编译器中的错误? 如果没有,我的原始代码是错误的吗?
感谢您的任何见解。
马克