加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

java – Sonar Violation:低效使用keySet迭代器而不是entrySet

发布时间:2020-12-15 04:29:33 所属栏目:Java 来源:网络整理
导读:请参考以下方法: public Properties getProperties() { try { Properties properties = new Properties(); loadProperties(properties); for (Object key : properties.keySet()) { properties.setProperty((String) key,convertPropertyValue(properties.g
请参考以下方法:

public Properties getProperties()
    {
        try
        {
            Properties properties = new Properties();
            loadProperties(properties);
            for (Object key : properties.keySet())
            {
                properties.setProperty((String) key,convertPropertyValue(properties.getProperty((String) key)));
            }

            // Add Config API Keys/Values
            IConfigurationManager configMgr = ConfigurationManager.getInstance();
            Map<String,Setting> settings = configMgr.getSettings();
            for (String key : settings.keySet()) {
                properties.setProperty(key,settings.get(key).getValue());
            }

            return properties;
        } catch (java.io.IOException ex)
        {
            return null;
        }
    }

当我将代码更改为settings.entrySet()而不是settings.keySet()时,它会抛出以下错误:

<<< error: incompatible types
[ERROR] for (String key : settings.entrySet()) >>>

我可以理解,因为entrySet返回键值对,其中只有键是预期的,我得到不兼容的错误.

如何为以下代码实现entrySet来修复声纳违规?

以下是设置键和值的setProperty()方法

public synchronized Object setProperty(String key,String value) {
    return put(key,value);
}

解决方法

Map.entrySet()返回类型 Set<Map.Entry>.Map.Entry用于将每个键和相关值保持在一起.由于可以使用传统的for-each循环迭代Set,因此可以像这样重写for循环:

for (Map.Entry<String,Setting> entry : settings.entrySet()) {
    properties.setProperty(entry.getKey(),entry.getValue().getValue());
}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读