【问题标题】:Kotlin: Overload resolution ambiguityKotlin:重载分辨率歧义
【发布时间】:2019-12-16 00:02:46
【问题描述】:

正在尝试执行以下代码:

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)

        Test().list.contains(1)
    }
}

public class Test {

    ArrayList<Integer> list;

    public ArrayList<Integer> getList() {
        return list;
    }
}

Test().list.contains(1) 处编译失败并显示消息:

任务:app:compileDebugKotlin FAILED e: /Users/sreejithcr/Documents/MyApplication/app/src/main/java/com/wxample/myapplication/MainActivity.kt: (13, 31): 重载解析歧义: public open fun contains(@Nullable element: Int!): java.util.ArrayList 中定义的布尔值 public open fun contains(@Nullable element: Int!): Boolean defined in java.util.ArrayList

我的理解是编译器发现 2 个 contains() 具有完全相同的签名,但不确定要调用哪个。

gradle 配置:

ext.kotlin_version = '1.3.41'

类路径'com.android.tools.build:gradle:3.4.2'

【问题讨论】:

  • 我遇到了同样的错误,但是 Kotlin + Java + Intellij IDEA
  • 仅供参考:我的问题是我的依赖列表中的 Kotlin 版本与另一个导入库的依赖冲突。

标签: java android android-studio kotlin


【解决方案1】:

在阅读您的代码时,我注意到一些冲突:

首先,Test 需要一个公共构造函数,它会创建 ArrayList,……。喜欢:

public Test(){ list = new ArrayList<>(); }

其次,将变量列表设为私有,只能通过 getter/setter 授予访问权限。 三、在方法onCreate()中试试:

new Test().getList().contains(1);

【讨论】:

  • 这只是一个sn-p。这里的所有建议都不能解决我面临的问题。
【解决方案2】:

这是 Android Studios API 29 R2 的问题

https://issuetracker.google.com/issues/139041608#comment3

转到工具 -> SDK 管理器 -> 卸载 Android 9.+,然后在 Google 回滚 R2 时再次安装它,这样您将回到 R1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-02-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-12-22
    • 1970-01-01
    • 2021-02-22
    相关资源
    最近更新 更多