kotlin - findview - Anulación accidental: las siguientes declaraciones tienen la misma firma JVM
kotlin extensions (2)
Además de la respuesta ya dada ...
- O bien, puede mantener
val
(ovar
) pero cambiar el nombre del parámetro a algo que no coincida con la declaración de la super clase.
En una declaración de clase, los parámetros en las declaraciones del constructor son a menudo más que solo parámetros. Usando val
o var
, en realidad estás declarando miembros de propiedad (no solo parámetros). Y junto con los miembros de la propiedad vienen los "captadores" automáticos (y los "configuradores" en el caso de var
). El captador automático, en el caso del OP, se llama getContext()
pero la clase base ya tiene un getContext () (la misma firma).
Lo más probable es que la intención aquí fuera simplemente pasar el context
al super, en cuyo caso, la otra respuesta funciona mejor. Pero, en el caso de que se desee una nueva propiedad, pero el nombre elegido colisione con un miembro de super propósito, el cambio es la alternativa.
En resumen , el cambio de nombre se aplica cuando desea una nueva variable de miembro, pero una súper clase ya expone a un miembro diferente con el mismo nombre.
Estoy recibiendo este error en Kotlin en esta parte:
class GitHubRepoAdapter(private val context: Context,
private val values: List<GithubRepo>) : ArrayAdapter<GithubRepo>(context, R.layout.list_item,
values) {
contexto val privado: contexto
en el registro dice:
Error: (14, 25) Anulación accidental: las siguientes declaraciones tienen la misma firma JVM (getContext () Landroid / content / Context;): fun (): Context fun getContext (): Context!
No puedo ver qué está causando el problema.
Esto sucede porque el compilador de Kotlin intenta generar un captador para el val context
declarado en el constructor primario de su clase, es decir, un método getContext()
, pero la clase base ArrayAdapter<T>
ya tiene dicho método .
Puedes resolverlo haciendo uno de los siguientes:
Cambie el parámetro del constructor de su clase para que no sea un
val
.class GitHubRepoAdapter(context: Context, ...
En este caso, el captador no se generará y el conflicto desaparecerá.
Esta parece ser la solución preferible en su caso, ya que, incluso sin redeclaración, ya existe un
context
propiedades sintéticas deducido del Java getter .Use la anotación
@JvmName
, aplíquela a la propiedad decontext
getter :class GitHubRepoAdapter(@get:JvmName("getContext_") private val context: Context, ...
Esto hará que el compilador genere el captador con otro nombre JVM (el que se especifica en la anotación), evitando así el conflicto, pero haciendo que el acceso desde Java sea menos intuitivo (especialmente porque habrá dos funciones similares). En Kotlin, aún podrá utilizar la propiedad con su
context
nombre original.