gpt4 book ai didi

kotlin - 意外覆盖 : The following declarations have the same JVM signature

转载 作者:IT老高 更新时间:2023-10-28 13:26:50 27 4
gpt4 key购买 nike

我在这部分的 Kotlin 中遇到了错误:

class GitHubRepoAdapter(
private val context: Context,
private val values: List<GithubRepo>
) : ArrayAdapter<GithubRepo>(
context,
R.layout.list_item,
values
)

私有(private) val 上下文:上下文

日志中写着:

Error:(14, 25) Accidental override: The following declarations have the same JVM signature
(getContext()Landroid/content/Context;):
fun <get-context>(): Context
fun getContext(): Context!

我看不出是什么导致了问题。

最佳答案

这是因为 Kotlin 编译器试图为 val context 生成一个 getter。在您的类主构造函数中声明,即方法 getContext() , 但基类 ArrayAdapter<T> already has such a method .

您可以通过执行以下操作之一来解决此问题:

  • 将你的类的构造函数参数改为不是 val .

       class GitHubRepoAdapter(context: Context, ...

    这种情况下不会生成getter,冲突也就消失了。

    这似乎是您的首选解决方案,因为即使没有重新声明,there is already a synthetic property context inferred from the Java getter .

  • 使用 @JvmName 注释,apply it to the context property getter :

       class GitHubRepoAdapter(@get:JvmName("getAdapterContext") private val context: Context, ...

    这将使编译器生成具有另一个 JVM 名称(在注解中指定的名称)的 getter,从而避免冲突,但会使从 Java 中访问它的直观性降低(尤其是因为会有两个相似的函数)。在 Kotlin 中,您仍然可以使用原始名称 context 的属性。 .

关于kotlin - 意外覆盖 : The following declarations have the same JVM signature,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44035263/

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