首页 > 解决方案 > Kotlin 代表出错了

问题描述

如果我以这种方式使用它,它总是会抛出 NoSuchElementException,哪里出错了?

val sessionMap: ConcurrentHashMap<String, Session> by object : ConcurrentHashMap<String, WebSocketSession>() {
    override fun put(key: String, value: Session): Session? {
        ........
        return super.put(key, value)
    }
}

例外

java.util.NoSuchElementException: Key sessionMap is missing in the map.

是对象没有类型吗?

标签: kotlin

解决方案


如果您只是想将属性设置为 a ConcurrentHashMap,但覆盖了它的一些方法,那么您实际上并不需要委托,您应该使用=而不是by. 您还必须使用SessionWebSocketSession始终使用。

val sessionMap = object : ConcurrentHashMap<String, Session>() {
    override fun put(key: String, value: Session): Session? {
        ........
        return super.put(key, value)
    }
}

推荐阅读