如何在Kotlin中创建带accessOrder的LinkedHashMap?编译报错求助
解决Kotlin中无法调用LinkedHashMap三参数构造方法的问题
你的问题出在两个关键点上,对应解决方案如下:
1. 去掉命名参数,按Java构造方法顺序传参
Kotlin调用Java的方法或构造方法时不支持命名参数语法,你之前用loadFactor = 0.75F、accessOrder = true的写法是Kotlin针对自身函数的特性,Java构造方法无法识别,必须严格按参数顺序传递。
2. 约束泛型为非空类型
Java的LinkedHashMap构造方法要求泛型参数为非空类型(对应Kotlin的Any),而你原代码中LRUCache的泛型K、V默认是可空的Any?,和构造方法的泛型约束不匹配,需要给泛型加上非空上界。
修正后的代码
class LRUCache<K : Any, V : Any>( private val size: Int ) { private val cache = LinkedHashMap<K, V>(size, 0.75F, true) }
如果业务场景确实需要支持可空的键或值,可以将泛型声明改为K : Any?, V : Any?,但实际LRU缓存场景中一般不建议存储null值,所以优先推荐非空约束的写法。
内容的提问来源于stack exchange,提问作者Dmitry P.
相关产品推荐
相关产品推荐

