0

ループ内の新しいインスタンスを作成することは避けたいと思い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;
}
4

3 に答える 3

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;
}
于 2013-07-25T10:00:53.060 に答える
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);
}
于 2014-03-16T04:48:15.930 に答える