Android Studio - Ambiguë appel de la méthode getClass()
Je suis en utilisant Android Studio pour mon application Android.
Mon code fonctionne et compile.
Récemment, l'IDE montre-moi d'erreur (rouge) sur getClass le code suivant:
fragment.getClass().getSimpleName()
Mais encore l'application compile et s'exécute.
L'erreur est:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
Peut-on m'expliquer de quoi ça parle? et pourquoi le code encore en cours?
- double possible de getClass() dans la classe abstraite donne Ambigu appel de la méthode
- Je reçois la même erreur, mais je peux encore assembler et à exécuter l'application de l'amende.
Vous devez vous connecter pour publier un commentaire.
Je pense que c'est un bug dans Android Studio. Comme nous le savons, Android Studio est basé sur IntelliJ Plate-forme et de la fonctionnalité existante de IntelliJ IDEA Community Edition.
Google a développé, en coopération avec JetBrains. Et même bug est signalé à arriver à l'Ide, ainsi.
Jetez un oeil à la Rapport d'erreur
La seule solution de contournement à ce problème est de jeter l'instance d'appel
getClass()
sur, àObject
comme suit:static variable
?Plutôt que de modifier le code de votre application, vous pouvez éviter ce bug en corrigeant votre SDK Android code source.
Quand vous venez à travers la getClass() erreur, passez à la déclaration de la méthode (⌘B sur Mac). Cela permettra d'accéder à un chemin tel que
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Maintenant, au sein de l'Ide ou Android Studio:Object.java
accessible en écriture par le choix deFile -> Make File Writable
. Vous pouvez être invité à le faire automatiquement si vous essayez de modifier le fichier.Supprimer l'abîme d'générique:
//Supprimé sans bornes génériques (la Classe) pour éviter http://youtrack.jetbrains.com/issue/IDEA-72835
public final native Class getClass();
Des versions plus récentes d'Android Studio semblent souffrir d'un bug qui vous empêche de modifier le fichier, même après la déclarer comme en écriture. Au lieu de cela, copier le chemin d'accès,
Edit -> Copy Path
ou ⇧⌘C, et de le modifier dans votre éditeur de texte favori.Ce changement permettra de préserver la source de la fonctionnalité de navigation. Autres options:
getClass()
déclaration.Object.java
fichier, par exempleObject.java.in
.Object.java
à être modifiées, même après l'extinction de l'indicateur de lecture seule.instance.getClass()
(seulementgetClass()
œuvres). RenommerObject.java
fichier pour désactiver ça fonctionne.Jeté votre "getClass" à un Objet, utilisez
Pour ceux qui ont ce problème avec les fragments, l'utilisation
Premier de tous les Android Studio est ici.
Veuillez star de sorte qu'il peut obtenir un peu d'attention!
Aussi l'IntelliJ question est ici.
Une bonne solution consiste à renommer
<sdk>/android-<platform>/java/lang/Object.java
àObject.java.XXX
par exemple. Cela permettra d'éviter QUE de les voir, et la question doit être évitée. Bien sûr, en faisant cela, vous pouvez plus facilement accéder à la source de l'Objet à l'intérieur.Vous pouvez renommer le fichier avec son nom d'origine quand ce bug sera corrigé...
Aujourd'hui j'ai rencontré le même problème lorsque je créé un nouveau projet. Je l'ai comparé à un autre projet qui n'a pas eu ce problème et trouvé une différence. Le vieux projet a été construit contre "Android 4.2.2" alors que la nouvelle était par défaut à "l'API Android 19 Plate-forme". J'ai changé pour "Android 4.2.2" qui est égal à l'API 17 et le rouge erreur marqueur disparu. API 17 est suffisant pour mon projet donc je peux laisser cette manière. Je n'ai aucune idée de pourquoi cela résout le problème, pour être honnête.
J'ai trouvé un fix pour ce faire, au moins sur ma fin. C'est certainement une IntelliJ bug, mais il semble être provoqué par un conflit entre les classes dans le sourcepath et dans le classpath pour le SDK Android.
Si vous allez à la Structure du Projet > Sdk > {{Votre Android SDK}}, retirez tous les Android les entrées de la Sourcepath onglet. Le problème avec cette solution est que vous n'avez plus d'accès direct aux sources de l'intérieur de l'Ide/Android Studio.
J'ai posté la même information sur l' Jetbrains issue tracker, j'espère donc que nous allons voir un correctif rapidement.
Suffit d'utiliser le fragment.classe.getSimpleName();