Невозможно добавить элемент на карту - исключение неподдерживаемой операции - PullRequest
0 голосов
/ 06 апреля 2020

У меня проблемы с вставкой элемента в эту изменяемую карту, и я не могу понять, почему? Я вижу, что он возвращает карту, поэтому не должно быть проблем с добавлением элемента. Вы можете помочь мне с этим?

myClient.authentications.put("basicAuthentication", httpBasicAuth)

Аутентификации выглядят так:

public Map<String, Authentication> getAuthentications() {
        return authentications;
}
private Map<String, Authentication> authentications;

Есть ли что-то, чего мне здесь не хватает?

Редактировать 1: Добавление еще кода для очистки

HttpBasicAuth - это просто базовый c класс, который реализует аутентификацию

public class HttpBasicAuth implements Authentication {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public void applyToParams(List<Pair> queryParams, Map<String, String> headerParams) {
        if (username == null && password == null) {
            return;
        }
        headerParams.put("Authorization", Credentials.basic(
            username == null ? "" : username,
            password == null ? "" : password));
    }

 val httpBasicAuth = HttpBasicAuth()
                httpBasicAuth.username = "user"
                httpBasicAuth.password = "pass"
                myClient.authentications.put("basicAuthentication", httpBasicAuth)

1 Ответ

1 голос
/ 06 апреля 2020

В настоящее время по умолчанию это поле имеет значение null, поэтому вы НЕ МОЖЕТЕ вызывать какой-либо метод. Поэтому, когда вы звоните:

myClient.authentications.put("basicAuthentication", httpBasicAuth)

вы пытаетесь вызвать метод put() на null.

Чтобы решить эту проблему, вы можете изменить свою инициализацию с:

private Map<String, Authentication> authentications;

В (в Java):

private Map<String, String> authentications = new HashMap<>();

или в (в Kotlin):

private val authentications: Map<String, Authentication> = mapOf();

После этих изменений это поле будет инициализировано с помощью empty array вместо null. Помните, что это изменение очень важно, когда у вас есть логика c на его основе (например, вы проверяете authentications == null).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...