我想避免在循环中创建SelectItem
的新实例。
你能帮我一下吗?我怎么能避免它。
public List<SelectItem> createLocales() {
final List<SelectItem> enabledLocales = new ArrayList<SelectItem>();
final List<String> langCodes = labeldbservice.getEnabledLocales();
LOGGER.debug("getEnabledLocales: size={0}", langCodes);
for (final String langCode : langCodes) {
enabledLocales.add(new SelectItem(langCode, LocaleUtils.toLocale(langCode).getDisplayName()));
}
return enabledLocales;
}
答案 0 :(得分:1)
public List<SelectItem> createLocales() {
final List<SelectItem> enabledLocales = new ArrayList<SelectItem>();
final List<String> langCodes = labeldbservice.getEnabledLocales();
final SelectItem sItem = new SelectItem();
LOGGER.debug("getEnabledLocales: size={0}", langCodes);
for (final String langCode : langCodes) {
sItem.setValue(langCode);
sItem.setLabel(LocaleUtils.toLocale(langCode).getDisplayName());
enabledLocales.add(sItem);
}
return enabledLocales;
}
答案 1 :(得分:1)
我通过创建一个返回新对象的方法解决了这个PMD问题。我将在循环中调用此方法来获取新对象 对于你的代码,它将是这样的。
public List<SelectItem> createLocales() {
final List<SelectItem> enabledLocales = new ArrayList<SelectItem>();
final List<String> langCodes = labeldbservice.getEnabledLocales();
LOGGER.debug("getEnabledLocales: size={0}", langCodes);
for (final String langCode : langCodes) {
enabledLocales.add(getNewSelectItem(langCode, LocaleUtils.toLocale(langCode).getDisplayName()));
}
return enabledLocales;
}
public SelectItem getNewSelectItem(String langCode, String displayName) {
return new SelectItem(langCode, displayName);
}
答案 2 :(得分:0)
我不明白你为什么要更改这段代码,但假设你已经把它测量为性能瓶颈,要么缓存createLocales的结果(全局或每个Thread使用一个懒洋洋地构建它的ThreadLocal),或者可能代替返回列表,将langCode中的映射返回到懒惰实例化的值并缓存所需的SelectItem实例。