首页 > 解决方案 > 如何在 Kotlin 中覆盖 HashMaps entrySet 方法?

问题描述

我想从这篇文章Retrofit — 多个同名查询参数中转换 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;
}

}

转换没有帮助,它给平台声明冲突。我想手动创建从 HashMap 扩展的 Kotlin 类,但是这个类没有 entrySet() 函数。该怎么办?

标签: kotlin

解决方案


使用kotlin.collections.HashMapor时,可以通过它们的属性访问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 中的声明来确认该属性是否映射到原始函数。不幸的是,文档似乎没有明确说明这种行为,或者至少我找不到它。


推荐阅读