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

意外重写:以下声明具有相同的JVM签名

和斌
2023-03-14

Kotlin在这部分中犯了错误:

class GitHubRepoAdapter(
    private val context: Context,
    private val values: List<GithubRepo>
) : ArrayAdapter<GithubRepo>(
    context, 
    R.layout.list_item,
    values
)
Error:(14, 25) Accidental override: The following declarations have the same JVM signature
(getContext()Landroid/content/Context;):  
    fun <get-context>(): Context  
    fun getContext(): Context!

共有1个答案

孔驰
2023-03-14

发生这种情况的原因是,Kotlin编译器试图为类主构造函数中声明的Val Context生成一个getter,即方法getContext(),但基类ArrayAdapter 已经有了这样的方法。

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

>

  • 更改类的构造函数参数,使其不是val

       class GitHubRepoAdapter(context: Context, ...
    

    使用@jvmname注释,将其应用于context属性getter:

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

    这将使编译器生成具有另一个JVM名称(注释中指定的名称)的getter,从而避免冲突,但使从Java访问它变得不那么直观(特别是因为将有两个类似的函数)。在Kotlin中,您仍然可以使用具有其原始名称context的属性。

  •  类似资料:
    • 我试图从Kotlin代码扩展RuntimeException并实现Java定义的GraphQLError接口时遇到以下错误。这是一个错误: 下面是我的代码: 其中是一个接口,在Java中定义如下所示: 它似乎与中定义的冲突。 如何创建自己的运行时异常,实现GraphqlError? PS:我也尝试了下面的,收到了一个非常相似的错误:

    • 在最后一个Kotlin类中,我有以下错误:“class”KotlinClass“不是抽象的,并且不实现基类成员public abstract fun setMessages(var1:(Mutable)Collection!):在com.package.ChildClass中定义的单元。 当我接受使用IDE生成方法实现的建议时,我有: Public open fun setMessages(Mes

    • 我有一个基本接口,并从中扩展了3个接口,和。在对进行了一些业务更改之后,现在与相同,但为了一致性,我不希望仅使用,而不是使用扩展接口。我试着这样做: 然后,ESLint警告我不要使用空接口。如果我不想禁用此规则,是否有方法将声明为与相同的接口?

    • 我有一个类,比如说,它有两个函数,它们的名称相同,参数数量相同,但参数类型不同。现在,我假设模拟它们的返回值应该像使用两个语句和适当的匹配器一样,但是当我尝试得到以下错误时: 组织。莫基托。例外。滥用。InvalidUseOfMatcherException:此处检测到错误放置的参数匹配器: - 以下是我尝试的一个例子: 虽然我不是Mockito的巫师,但我已经使用它一段时间了,从来没有遇到过这个

    • 但我的问题是,当我从Eclipse导出项目以生成签名apk时,它不允许使用现有的密钥库;此外,当我选择existing keystore时,别名的下拉列表为空。所以每次我都要创建新的密钥库。在选择退出密钥存储时,它还显示“无效密钥存储格式”。请提供我的一些解决方案,以我如何生成一个APK与相同的SHA-1密钥。

    • 正如在 声明性映射 ,声明式样式包括生成映射 Table 对象,或容纳 Table 或其他 FromClause 直接对象。 以下示例假定声明性基类为: from sqlalchemy.orm import declarative_base Base = declarative_base() 下面的所有示例都说明了从上面继承的类 Base . 装饰风格 使用修饰符的声明性映射(无声明基) 下面的