public Collection<QueueMetrics> getAllGatewayQueueMetricsCurrent(String keywords)
{
QueueMetrics qmInput = null;
QueueMetrics qmImport = null ;
QueueMetrics qmReport = null ;
ArrayList<QueueMetrics> metrics = new ArrayList<QueueMetrics>();
for (String keyword : keywords.split(",")){
ConsoleServiceMBean console = getConsoleService(keyword);
populateMessageCountStr(qmInput, keyword, console, "input");
populateMessageCountStr(qmImport, keyword, console, "import");
populateMessageCountStr(qmReport, keyword, console, "report");
}
metrics.add(qmInput);
metrics.add(qmImport);
metrics.add(qmReport);
return metrics;
}
private void populateMessageCountStr(QueueMetrics qMetrics, String keyword, ConsoleServiceMBean console, String type)
{
QueueMetrics tempMetric = console.getGatewayQueueMetricsCurrent(type, keyword);
if( qMetrics == null ){
qMetrics = tempMetric ;
}else{
qMetrics.setPendingMessageCountStr( qMetrics.getPendingMessageCountStr() + ", " + tempMetric.getPendingMessageCount());
}
}
我尝试通过调用 populateMessageCountStr 并传入要更新的对象本身来更新上部 for 循环中的 qmInput、qmImport 和 qmReport。在下一个循环中,同一个对象将用额外的数据再更新一次。但是,这个程序的最终结果是 qmInput、qmImport 和 qmReport 都为空。有人知道为什么吗?为了提供更多信息,当我稍微更改上层函数时:
qmInput = populateMessageCountStr(qmInput, keyword, console, "input");
qmImport = populateMessageCountStr(qmImport, keyword, console, "import");
qmReport = populateMessageCountStr(qmReport, keyword, console, "report");
并且 lower 函数返回更新后的 QueueMetrics 而不是 void。该程序按预期工作。有人知道为什么原来的方法不起作用吗?我感谢任何有用的评论。