tutorial tools studio requisitos manager instalar full english developers android android-studio

tools - Android Studio-método ambiguo llamada getClass()



instalar android studio (7)

Estoy usando Android Studio para mi aplicación de Android.
Mi código funciona y compila.
Recientemente, el IDE me muestra un error (líneas rojas) en getClass del siguiente código:

fragment.getClass().getSimpleName()

Pero aún la aplicación compila y ejecuta.
El error es:

Ambiguous method call. Both getClass () in Object and getClass () in Object match.

¿Puede alguien explicarme de qué se trata? y por qué el código aún se está ejecutando?


Antes que nada, el problema relacionado con Android Studio está here . Por favor estrella para que pueda obtener algo de atención!

También el problema relacionado de IntelliJ está aquí .

Una buena solución para esto es cambiar el nombre de <sdk>/android-<platform>/java/lang/Object.java a Object.java.XXX por ejemplo. Esto evitará que AS lo vea y se evitará el problema. Por supuesto, al hacer esto, ya no puede navegar fácilmente a la fuente de Objeto desde AS.

Puede cambiar el nombre del archivo a su nombre original cuando se solucione este error ...


Creo que es un error en Android Studio. Como sabemos, Android Studio se basa en la plataforma IntelliJ y en la funcionalidad existente de IntelliJ IDEA Community Edition.

Google lo ha desarrollado en cooperación con JetBrains. Y se informa que el mismo error también ocurre en IntelliJ. Eche un vistazo al informe de errores

La única solución a este problema es convertir la instancia a la que llama getClass() en Object siguiente manera:

((Object) this).getClass()


Eche su "getClass" a un objeto, use

((Object) this).getClass()

Para aquellos que tienen este problema con fragmentos, use

((Object) fragment).getClass()


En lugar de modificar el código de su aplicación, puede evitar este error parcheando el código fuente de su SDK de Android.

Cuando encuentre el error getClass (), vaya a la declaración del método (⌘B en Mac). Esto navegará a una ruta como $ANDROID_HOME/sources/android-20/java/lang/Object.java . Ahora, dentro de IntelliJ o Android Studio:

  • Haga que Object.java escribir seleccionando File -> Make File Writable Object.java escribir. Se le puede pedir que haga esto automáticamente si intenta editar el archivo.
  • Eliminar el comodín sin límites:

    // Se eliminó el comodín ilimitado (Clase) para evitar http://youtrack.jetbrains.com/issue/IDEA-72835 público nativo final Clase getClass ();

Las versiones más nuevas de Android Studio parecen sufrir un error que le impide editar el archivo incluso después de declararlo como grabable. En su lugar, copie la ruta, Edit -> Copy Path o ⇧⌘C, y edítela en su editor favorito.

Este cambio preservará la funcionalidad de navegación de origen. Otras opciones:

  • Puede comentar la declaración getClass() .
  • Puede agregar una extensión que no sea de Java al nombre del archivo Object.java , por ejemplo, Object.java.in .

Encontré una solución para esto, al menos en mi parte. Definitivamente es un error IntelliJ, pero parece ser causado por un conflicto entre las clases en Sourcepath y en el classpath para Android SDK.

Si va a Estructura del proyecto> SDK> {{Su SDK de Android}}, elimine las entradas de Android de la pestaña Sourcepath. El problema con esta solución alternativa es que ya no tiene acceso directo a las fuentes desde IntelliJ / Android Studio.

He publicado la misma información en el rastreador de problemas de Jetbrains , así que espero que veamos una solución pronto.


Hoy me encontré con el mismo problema cuando creé un nuevo proyecto. Comparé con otro proyecto que no tenía este problema y encontré una diferencia. El proyecto anterior se creó con "Android 4.2.2", mientras que el nuevo se configuró de forma predeterminada como "Android API 19 Platform". Cambié eso a "Android 4.2.2", que es igual a API 17 y el marcador de error rojo desapareció. API 17 es suficiente para mi proyecto, así que puedo dejarlo de esta manera. No tengo idea de por qué esto resuelve el problema, para ser honesto.


Solo use fragment.class.getSimpleName ();