在我工作的代码,现在我遇到了下面的一段:双重检查是否存在地图元素?
PartnerReportItem item = (map.get(partnerId) == null) ? null
: map.get(partnerId).get(platform); //1, check for existence
if (item == null) {
item = new PartnerReportItem();
item.setPlatform(platform);
item.setPartnerId(partnerId);
item.setPartnerEmail(partner.getEmail());
item.setPartnerPaymentDetails(paymentDetails);
item.setPartnerCoef(partner.getCoef());
item.setExchangeMap(exchangeMap);
if (!map.containsKey(partnerId)) //2, double check for existence??
map.put(partnerId, new HashMap<Platform, PartnerReportItem>());
map.get(partnerId).put(platform, item);
}
我很困惑的//1
和//2
,因为我认为// 2 unneccesary这里。我们已经检查了地图中是否存在partnerId
元素。我可能没有得到一个隐藏的想法吗?
它可能是多余的('// 2'总是为真),但是在多线程环境中,可能会在地图中添加一个新值。 – 2014-12-19 08:43:29
@GáborBakos我正在开发一个web应用程序,所以有多线程环境。你会建议离开这段代码吗? – 2014-12-19 08:44:45
我不会删除第二个检查。它的目的。 – 2014-12-19 08:45:33