Сонар: замените синхронизированный класс "Hashtable" на несинхронизированный класс, такой как "HashMap" - PullRequest
1 голос
/ 02 марта 2020

У меня возникли проблемы при замене хэш-таблицы на хэш-карту, поскольку используемый им метод получает хеш-таблицу:

private Context getInitialContext() throws NamingException {

        final Hashtable<String, Object> jndiProperties = new Hashtable<>();

        jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming");
        // This "new InitialContext()" receives a Hastable, and I can't modify that
        // because that is part of a jar
        // "javax.naming.InitialContext.InitialContext(Hashtable<?, ?> environment)
        // throws NamingException"
        context = new InitialContext(jndiProperties);

        return context;
    }

Метод InitialContext:

public InitialContext(Hashtable<?,?> environment)
        throws NamingException
    {
        if (environment != null) {
            environment = (Hashtable)environment.clone();
        }
        init(environment);
    }

Что я могу сделать, чтобы решить эту кодовую ячейку ??

1 Ответ

2 голосов
/ 02 марта 2020

Поскольку InitialContext на самом деле требует Hashtable (что является плохим решением API, но оно, вероятно, было принято еще до того, как Map появилось в Java), на самом деле нет способа полностью избежать Hashtable , В этом случае подавление предупреждения в сонаре (или пометка его как WontFix или как ложное срабатывание) является соответствующей реакцией.

...