Android Studio Ambigua llamada al método getClass()

Estoy usando Android Studio para mi Android de la aplicación.

Mi código funciona y compila.

Recientemente, el IDE showes me de error (líneas rojas) en getClass de el código siguiente:

fragment.getClass().getSimpleName()

Pero aún así la aplicación se compila y ejecuta.

El error es:

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

¿Alguien me explique de qué se trata? y por qué el código sigue funcionando?

InformationsquelleAutor NickF | 2013-08-29

7 Kommentare

  1. 255

    Creo que es un bug en Android Studio. Como sabemos, Android Studio está basado en IntelliJ de la Plataforma y la funcionalidad existente de IntelliJ IDEA Edición de la Comunidad.

    Google ha desarrollado en cooperación con JetBrains. Y el mismo error es reportado a suceder en IntelliJ así.
    Eche un vistazo a la Informe de errores

    La única solución a este problema es para echar la instancia de llamar getClass(), para Object de la siguiente manera:

    ((Object) this).getClass()
    • no importa ahora… MUCHO UPVOTES 🙂
    • véase mi respuesta a continuación
    • Gracias @RiteshGune, el elenco se ha solucionado el problema.
    • Sólo el uso del fragmento.clase.getSimpleName();
    • modificar el código para evitar un error en un IDE no es mucho de una solución.
    • No funciona, o al menos no en la actualidad (Android Studio 0.8.9)
    • Solución el problema se soluciona en IntelliJ IDEA 13.1.
    • Más de un año más tarde y todavía no es fijo 🙁
    • Lo que si quiero guardar en un static variable?

  2. 73

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

    Cuando usted viene a través de la getClass() error, vaya a la declaración del método (⌘B en Mac). Esto se vaya a una ruta de acceso como $ANDROID_HOME/sources/android-20/java/lang/Object.java. Ahora bien, dentro de IntelliJ o Android Studio:

    • Hacer Object.java de escritura eligiendo File -> Make File Writable. Se le puede hacer esto de forma automática si se intenta editar el archivo.
    • Quitar el unbounded comodín:

      //Elimina ilimitado de caracteres comodín (de Clase) para evitar http://youtrack.jetbrains.com/issue/IDEA-72835
      público final de la Clase nativa getClass();

    Las versiones más recientes de Android Studio parecen sufrir de un error que impide la edición del archivo que incluso después de la declaración de escritura. En su lugar, copie el camino, Edit -> Copy Path o ⇧⌘C, y editarlo en tu editor favorito.

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

    • Puede comentar todo el getClass() declaración.
    • Usted puede anexar un no-extensión de Java para el nombre de la Object.java archivo, por ejemplo,Object.java.in.
    • James Wald, bonita respuesta,+1
    • En realidad, yo creo que esto debe ser aceptado respuesta.
    • Actualizada la respuesta para reflejar el hecho de que Android Studio tiene un bug que no permite Object.java a ser editado, incluso después de borrar el indicador de sólo lectura.
    • Aquí es la Android Studio informe de errores.
    • Solo comentar que el método getClass causas IntelliJ/Studio para quejarse de instance.getClass() (sólo getClass() obras). El cambio de nombre de Object.java archivo para deshabilitar el que hace el trabajo.
    • ¿Usted también encontrará una similar parche para el SDK de Android de código fuente de otros métodos de Objeto? A veces tengo la misma ambigua llamada al método notify(), wait(long), etc. así. A esos métodos, se sugiere que el parche no se puede aplicar.
    • Tendrás a comentar los métodos o cambie el nombre del archivo de origen para evitar que se indexen, o usted puede agregar conversiones explícitas de Objeto, como se sugiere por el stackoverflow.com/a/18506329/204480. Parece como si este problema se ha solucionado en la EAP IntelliJ construye desde agosto por lo que debe hacer su camino a Android Studio en el futuro.
    • Gracias. Me parece que han perdido los últimos dos sugerencias en tu post, por favor, discúlpame. Que bueno saber que es posible que haya sido corregido.

  3. 9

    Emitir su «getClass» a un Objeto, utilice

    ((Object) this).getClass()

    Para los que tengan este problema con fragmentos, uso

    ((Object) fragment).getClass()
    • En realidad, no lanzas la getClass() resultado, convertir el objeto en el que está ahora (este) a ser tratada como un Objeto.
    • Esto probablemente se merecen una medalla de oro por las más infames solución requiere por un IDE de Java. La fundición de un Objeto Java a Objeto, impresionante vacuidad.
  4. 8

    Primero de todos los relacionados con el Android Studio problema es aquí.
    Por favor estrellas, de manera que puedan obtener un poco de atención!

    También los relacionados con IntelliJ problema es 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 COMO de ver y el problema se puede evitar. Por supuesto, al hacer esto, usted no puede navegar fácilmente a la fuente de Objeto desde dentro.

    Puede cambiar el nombre del archivo con su nombre original cuando este error será corregido…

  5. 2

    Hoy me he topado con el mismo problema cuando he creado un nuevo proyecto. He comparado a otro proyecto que no tiene este problema y encontrar una diferencia. El viejo proyecto fue construido en contra de «Android 4.2.2», mientras que la nueva era por defecto es «Android API 19 de la Plataforma». He cambiado a «Android 4.2.2», lo que equivale a la API 17 y el rojo de error marcador desaparecido. API 17 es suficiente para mi proyecto, así que puedo salir de esta manera. No tengo idea de por qué esto resuelve el problema, para ser honesto.

  6. 1

    He encontrado una solución para esto, al menos en mi final. Es, definitivamente, un IntelliJ error, pero parece ser causado por un conflicto entre las clases en el sourcepath y en la ruta de clases para el SDK de Android.

    Si vas a la Estructura del Proyecto > Sdk > {{El SDK de Android}}, remover cualquier Android entradas de la Sourcepath ficha. El problema con esta solución es que ya no tienen acceso directo a las fuentes de dentro de IntelliJ/Android Studio.

    He publicado la misma información en el Jetbrains issue tracker, así que espero que vamos a ver una solución pronto.

    • Ahora hay una solución. Probablemente será incluido en v0.9.3

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein