在 kotlin 中访问 HashMap 中声明的对值时如何消除错误“创建扩展属性'Any.second'”?

问题描述 投票:0回答:1

我有一个名为 ImageStore 的 Singleton 类,其中我声明了一个 Hashmap,其中每个键的值是一个 Pair,如下所示

object ImageStore {

    val imagesNamesMap = hashMapOf(
        R.drawable.africa to Pair("Africa","Afrika"),
        R.drawable.asia to Pair("Asia","Azija"),
        R.drawable.europe to Pair("Europe","Europa"),
        R.drawable.antartica to Pair("Antarctica","Antarktida"),
        R.drawable.airplane to Pair("Aeroplane","Lėktuvas"),
        R.drawable.apple1 to Pair("Apple","Obuolys"),
        R.drawable.key to Pair("Key","raktas"),
        R.drawable.sleep to Pair("to sleep","miegoti)"
    ).toList().shuffled().take(4)).toMap()


}

我有一个 Fragment,我试图在其中访问 Imagestore 的实例以及 Pair 中的两个值,因此我已将此代码放入我的 Fragment 类中,如下所示。

 val shuffledImageResources = ImageStore.imagesNamesMap.keys.toList().shuffleList().toMutableList()

        val shuffledImageNames1: List<Pair<String, String>> = shuffledImageResources.mapNotNull { it ->
            val pair = ImageStore.imagesNamesMap[it]
            pair?.let { Pair(pair.first, pair.second) } //
        }

这里,当我单击pair.first 中的first 时,pair.first 和pair.second 中的firstsecond 给出错误,它给我以下消息,如下图所示

2https://i.stack.imgur.com/Vo94H.jpg,当我点击pair.second中的second时,它给了我这个错误,如下图所示

list kotlin hashmap
1个回答
0
投票

imagesNamesMap
中值的推断类型是
Any
而不是
Pair
。请尝试如下:

val imagesNamesMap = hashMapOf(
    0 to Pair("Africa","Afrika"),
    1 to Pair("Asia","Azija"),
    2 to Pair("Europe","Europa"),
    3 to Pair("Antarctica","Antarktida"),
    4 to Pair("Aeroplane","Lėktuvas"),
    5 to Pair("Apple","Obuolys"),
    6 to Pair("Key","raktas"),
    7 to Pair("to sleep","miegoti")
).toList().shuffled().take(4).toMap()

我在

)
之后删除了
take(4)
,并将
)
"
 中的 
Pair("to sleep","miegoti)"

交换
© www.soinside.com 2019 - 2024. All rights reserved.