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

标签 java kotlin

我在 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/

相关文章:

java - collat​​z 序列 - 优化代码

java - 如何在 Spring 中为 WebSocket 升级请求自定义 HTTP 响应?

Java CSVeed 库,未引用字段内的引用选项?

kotlin - CORS在Kotlin lambda中阻止请求,但在相同设置的Node lambda中阻止

kotlin - 如何强制调用某些构造函数/函数以使用命名参数?

android - 如何将菜单项显示为 fragment 中工具栏上的操作

java - 通过并发请求多次运行 JAR

java - spring-boot-starter-web 和 spring-boot-starter-webflux 不能一起工作吗?

java - Java中如何保证同一时间只有一个请求

android - 带有默认值的 Kotlin-moshi 代码生成继承