Как переопределить метод entrySet HashMaps в Kotlin? - PullRequest
0 голосов
/ 07 октября 2019

Я хочу преобразовать класс Java из этого поста Модернизация - несколько параметров запроса с тем же именем, где имя динамически устанавливается в kotlin.

public class ProxyRetrofitQueryMap extends HashMap<String, Object> {
public ProxyRetrofitQueryMap(Map<String, Object> m) {
    super(m);
}

@Override
public Set<Entry<String, Object>> entrySet() {
    Set<Entry<String, Object>> newSet = new HashSet<>();

    return newSet;
}

}

Преобразование не помогает, оно дает конфликт декларации платформы. Я хочу вручную создать класс Kotlin, который выходит из HashMap, но у этого класса нет функции entrySet (). Что делать?

1 Ответ

3 голосов
/ 07 октября 2019

При использовании kotlin.collections.HashMap или java.util.HashMap функция entrySet() доступна через их свойство entries, которое можно переопределить следующим образом:

class ProxyRetrofitQueryMap : HashMap<String, Any>() {
    override val entries: MutableSet<MutableMap.MutableEntry<String, Any>>
        get() {
            val newSet = HashSet<MutableMap.MutableEntry<String, Any>>()

            return newSet
        }
}

Вы можете подтвердить, что это свойство отображается на исходную функцию, используя ее в коде, а затем перейдя к ее объявлению в IDE. К сожалению, в документации, похоже, не говорится об этом поведении явно, или, по крайней мере, я не смог его найти.

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