java异常流中的意外行为

时间:2014-01-24 05:36:38

标签: java exception

我写了以下代码片段: -

public Collection<?> constructResponse (...........) throws RemoteException { 

  while (keyIterator.hasNext())
                {
                    String keyValue = (String) keyIterator.next();
                    keyString = new StringBuilder(); // since multiple keys will be there in map need to ensure every time keyString and valueString is created
                    valueString = new StringBuilder();
                    keyString.append(keyValue + ";" + "name");
                    List<CustomValuePOJO> customPOJOlist = employeeValuesMap.get(keyValue );
                    for (CustomValuePOJO customPOJO : customPOJOlist )
                    {
                        if (protocol == null || protocol.equals(""))
                        {
                            valueString.append(rpNatPOJO.getDcnPort() + ":"+ rpNatPOJO.getProtocol() + ";");
                        }
                        else if (customPOJO .getProtocol().equals(protocol))
                        {
                            valueString.append(customPOJO .getPort() + ":"+ protocol + ";");
                        } 
                        else
                        {   throw new RemoteException("Invalid Argument: Unsupported protocol "+ protocol);
                        }
                    }
                    if (valueString.length() == 0)
                    {
                        return generateErrorResponse("No info found");
                    }
                    responseMap.put(keyString.toString(), valueString.toString());
                }

}

正在发生的奇怪行为是,迭代通过customPOJO进入elseIf,并通过执行以下代码设置valueString中的值:

else if (customPOJO .getProtocol().equals(protocol))
                    {
                        valueString.append(customPOJO .getPort() + ":"+ protocol + ";");
                    } 

此后,如果它直接上线

throw new RemoteException("Invalid Argument: Unsupported protocol "+ protocol);

在追加操作中没有出现错误,并在调试透视图中检查该值是否在valueString中成功附加。

请告诉我缺少的东西

1 个答案:

答案 0 :(得分:0)

图I我应该把它作为答案,而不仅仅是评论......

当您的代码(您在调试器中单步执行)与已编译的类文件(实际正在运行)不同步时,可能会发生这种行为。由于调试信息与行号相关联,因此类文件中的行可能与您看到的源代码中的行不同。

尝试运行干净的构建,并确保类路径上没有可能导致此问题的重复jar。