gpt4 book ai didi

java - 为什么调用 put() 在使用类似代码在 Java 中编译时无法在 Kotlin 中编译

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:32:05 29 4
gpt4 key购买 nike

我在 java 中有以下函数,我需要将其转换为 Kotlin。

@Override
public void afterTextChanged(Editable s) {

if (s != null && !"".equals(s.toString())) {
int position = (Integer) mHolder.numEdit.getTag();
// Saved to the data variable when the data changes
mData.get(position).put("list_item_inputvalue",
s.toString());
}
}

这是我创建的等效 Kotlin 代码:

override fun afterTextChanged(s: Editable?) {

if (s != null && "" != s.toString()) {
val position = mHolder.numEdit!!.tag as Int
// Saved to the data variable when the data changes
mData?.get(position).put("list_item_inputvalue", s.toString())
}
}

编译器不喜欢调用 .put()。 Java中的变量mData是:

private List<Map<String, String>> mData;

和 Kotlin :

var mData: List<Map<String, String>>? = null

为什么编译器不喜欢 Kotlin 中 put 的转换?

更新:

println(mData) = [{list_item_inputvalue=0}, {list_item_inputvalue=1},...]

println(mData?.get(position)) = {list_item_inputvalue=8}

error

Code in Java

最佳答案

你的问题围绕着你问题中的这个陈述:

var mData: List<Map<String, String>>? = null

在 Kotlin 中,Map type 是不可变的,因此没有 .put()方法。这就是你遇到的问题。要修复它,只需将此语句更改为:

var mData: List<MutableMap<String, String>>? = null

第二个“?”在 mData?.get(position) 之后是必需的因为该语句将返回 null如果mData == null .也就是说,该语句返回类型 MutableMap<String, String>?即使 .put()本身会返回一种类型 MutableMap<String, String> .

总而言之...如果您创建了一个可变映射列表,编译器就会对以下语句感到满意:

mData?.get(position)?.put("list_item_inputvalue", s.toString())

关于java - 为什么调用 put() 在使用类似代码在 Java 中编译时无法在 Kotlin 中编译,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56726573/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com