当前位置: 首页 > 知识库问答 >
问题:

Kotlin未解析引用:从Java代码转换后添加

许博易
2023-03-14

我有如下java代码:

    public static <KEY, VALUE> Map<KEY, List<VALUE>> createMultimap(@NonNull Collection<VALUE> values, @NonNull TransformFunction<VALUE, KEY> transformFunction) {
    Map<KEY, List<VALUE>> tmpMap = new HashMap<>();
    for (VALUE value : values) {
        if (value != null) {
            KEY key = transformFunction.transform(value);
            List<VALUE> valuesList = tmpMap.get(key);
            if (valuesList == null) {
                valuesList = new ArrayList<>();
                tmpMap.put(key, valuesList);
            }
            valuesList.add(value);
        }
    }
    return Collections.unmodifiableMap(tmpMap);
}

我使用Android Studio选项“转换为Kotlin”对其进行了转换

下面是它的外观:

    fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, List<VALUE>> {
    val tmpMap = HashMap<KEY, List<VALUE>>()
    for (value in values) {
        if (value != null) {
            val key = transformFunction.transform(value)
            var valuesList: List<VALUE>? = tmpMap[key]
            if (valuesList == null) {
                valuesList = ArrayList()
                tmpMap.put(key, valuesList)
            }
            valuesList.add(value)

        }
    }
    return Collections.unmodifiableMap(tmpMap)
}

IDE现在在这里强调了'add'方法:

valuesList.add(value)

它说:

未解决的引用:添加

我怎样才能解决这个问题?

更新:

这是我的转换函数:

    interface TransformFunction<VALUE, RESULT> {
    fun transform(value: VALUE?): RESULT
}

示例用法:

    private fun getRSSIMultimap(rssiEvents: Collection<LocationRSSIEvent>): Map<NexoIdentifier, List<LocationRSSIEvent>> {
    return CollectionsUtils.createMultimap(rssiEvents, object : CollectionsUtils.TransformFunction<LocationRSSIEvent, NexoIdentifier> {
        override fun transform(locationRSSIEvent: LocationRSSIEvent): NexoIdentifier {
            return locationRSSIEvent.nexoIdentifier
        }
    })
}

共有1个答案

彭华皓
2023-03-14

既然你要分配名单

换成

 fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, ArrayList<VALUE>> {
 var valuesList: ArrayList<VALUE>? = tmpMap[key]

更好地使用Kotlin MutableList,它目前与Javas ArrayList相同,但在以后的版本中可能会更改为本地方法。

 fun <KEY, VALUE> createMultimap(values: Collection<VALUE>, transformFunction: TransformFunction<VALUE, KEY>): Map<KEY, MutableList<VALUE>> {
    val tmpMap = HashMap<KEY, MutableList<VALUE>>()
    for (value in values) {
        if (value != null) {
            val key = transformFunction.transform(value)
            var valuesList: MutableList<VALUE>? = tmpMap[key]
            if (valuesList == null) {
                valuesList = mutableListOf()
                tmpMap.put(key, valuesList)
            }
            valuesList.add(value)

        }
    }
    return Collections.unmodifiableMap(tmpMap)
}
 类似资料:
  • 我想为Github上的静态编程语言android项目做出贡献,但我不知道静态编程语言。假设我将静态编程语言代码转换为Java在Android Studio中使用'Decomload',将我自己的java代码添加到转换的文件中,然后将编辑的文件转换回静态编程语言。如果我直接向其添加代码而不转换为java,那么生成的静态编程语言代码是否相同?如果我想在不了解静态编程语言的情况下为静态编程语言项目做出贡

  • 我试图使用新的相机硬件API(android.hardware.camera2)的示例代码为我的Android应用程序。首先,我通过Android Studio的静态编程语言插件的自动转换功能将Java代码转换为静态编程语言代码。下面是一段转换后的代码: 我得到了未解决的引用错误: 但是这些常数在原始Java代码中是可以识别的。这些错误有什么解决办法吗?

  • 所以我想试着转换我们的后端API源代码,它是用Java编写的,看看它看起来怎么样(IIRC在转换之前有一个预览),但是一旦我这样做了,它就自动开始转换所选文件夹中的所有文件,最后它要求代码更正,我回应说不,因为我想取消它,现在我被一个破碎的代码库卡住了,除了: 恢复到上次提交的git并重新实现从我这边完成的所有更改(如果在转换之前提交,我本可以阻止它,但哦,好吧) 继续使用Kotlin编写代码,但

  • 这个问题可能已经从所有其他类似的问题中得到了含蓄的回答,但我似乎无法让它起作用。 如果我试图从主源集中的Kotlin文件引用相同的文件,它会抱怨看不到它(“未解析的引用”)。 如果我将相同的文件移动到主源集,它就可以工作了(所以它不是文件本身)。 如果我将Java文件转换为Kotlin,它可以工作(这是我目前的解决方案),但我想知道为什么它不能工作,因为转换并不总是那么容易,它应该可以不进行转换。

  • 我正在Kotlin应用程序中使用AppIntro,需要自定义其布局。教程告诉我们使用此代码作为起点。因为这是用Java编写的,所以我将其转换为Kotlin(虽然不是100%自动化的,因为Kotlin不支持'static'关键字): 在本部分: Android Studio抱怨: 未解析的引用:ARG\u LAYOUT\u RES\u ID 如何解决这个问题?

  • 我试图将我的android项目迁移到使用gradle kotlin dsl,将所有的build.gradle文件替换为build.gradle.kts文件,并在那里使用kotlin。以前,我曾经有一个kotlin文件,其中包含具有库和版本常量的对象元素(在buildSrc->src->main->kotlin中),例如: