【问题标题】:Unresolved reference at compile but available by Intellisense编译时未解决的参考,但 Intellisense 提供
【发布时间】:2019-07-10 16:38:31
【问题描述】:

我正在为 Flutter 开发一个音频处理库,但我的一个原生 Kotlin 类遇到了问题。在下面的代码示例中,编译器抱怨在 samples 数组上对 copyInto 的调用是未解析的引用。据我所知,我已经确定它是一个IntArray,并且当我输入“samples”时,Android Studio 中的 Intellisense 甚至会显示copyInto 作为选项。

这是我的课程代码:

package com.----.audio_channels

import kotlin.math.abs
import kotlin.math.min

abstract class AudioTrackBuffer constructor(val loop: Boolean) {
    var position: Int = 0

    abstract fun getSamples(sampleCount: Int): IntArray
    abstract fun isComplete(): Boolean
    abstract fun dispose()
}

class RawAudioBuffer constructor(private val samples: IntArray, loop: Boolean, delay: Int): AudioTrackBuffer(loop) {

    init {
        position = -delay
    }

    override fun getSamples(sampleCount: Int): IntArray {
        val slice: IntArray

        if (position < 0) {
            slice = IntArray(sampleCount) { 0 }

            if (position + sampleCount < 0) {
                position += sampleCount
                return slice
            }

            val offset = abs(position)
            samples.copyInto(slice, offset, 0, min(sampleCount - offset, samples.size)) // Error
        } else {
            slice = samples.copyOfRange(position, min(position + sampleCount, samples.size))
            position += slice.size
        }

        return slice
    }

    override fun isComplete(): Boolean {
        return position >= samples.size
    }

    override fun dispose() {}
}

这是编译错误:

Launching lib\main.dart on SM N960U in debug mode...
Initializing gradle...
Resolving dependencies...
Running Gradle task 'assembleDebug'...
e: E:\flutter\workspace\audio_channels\android\src\main\kotlin\com\----\audio_channels\AudioTrackBuffer.kt: (33, 21): Unresolved reference: copyInto

FAILURE: Build failed with an exception.

* What went wrong:
Execution failed for task ':audio_channels:compileDebugKotlin'.
> Compilation error. See log for more details

* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Get more help at https://help.gradle.org

BUILD FAILED in 1s
Finished with error: Gradle task assembleDebug failed with exit code 1

【问题讨论】:

  • 您是否尝试过为示例创建一个支持字段?
  • 您使用过哪个 Kotlin 版本?我只是检查并看到 copyInto 从 1.3 开始可用
  • @SaedNabil 我不确定你的意思。我对 Kotlin 比较陌生,但我的理解是将 private val samples 放在主构造函数定义中隐式地将 samples 放入私有类字段中。为什么我需要有一个支持字段呢?它不为空,因为我可以对其执行其他操作(例如打印它),但由于某种原因我不能执行copyInto
  • @PhanVanLinh 在项目 gradle.build 中,它说ext.kotlin_version = '1.2.71'。我将其更改为 ext.kotlin_version = '1.3.40' 并且有效。如果您想发布答案,我会将其标记为正确。
  • 你是完全正确的,但我不清楚你可以访问对象但不能访问特定的copyinto,这对我来说没有任何意义,所以我认为可能是这个问题,不用担心,所以现在解决了,

标签: android kotlin flutter


【解决方案1】:

copyInto 函数自 kotlin 1.3 起可用。目前,您使用的是1.2.71,然后您会收到错误Unresolved reference: copyInto
因此,将您的应用程序 kotlin 版本更新为 >= 1.3 将解决您的问题

【讨论】:

    猜你喜欢
    • 2021-02-17
    • 2019-03-19
    • 1970-01-01
    • 2018-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-13
    • 1970-01-01
    相关资源
    最近更新 更多