Ich verwende Android Studio für meine Android-Anwendung.
Mein Code funktioniert und kompiliert.
Vor kurzem zeigt mir die IDE einen Fehler (rote Linien) auf getClass mit folgendem Code:
fragment.getClass().getSimpleName()
Trotzdem wird die Anwendung kompiliert und ausgeführt.
Der Fehler ist:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
Kann mir jemand erklären, worum es geht? und warum läuft der Code noch?
android
android-studio
NickF
quelle
quelle
Antworten:
Ich denke, es ist ein Fehler in Android Studio. Wie wir wissen, basiert Android Studio auf der IntelliJ-Plattform und den vorhandenen Funktionen der IntelliJ IDEA Community Edition.
Google hat es in Zusammenarbeit mit JetBrains entwickelt. Der gleiche Fehler soll auch in IntelliJ auftreten. Schauen Sie sich den Fehlerbericht an
Die einzige Abhilfe für dieses Problem ist die Instanz , die Sie rufen werfen
getClass()
auf, umObject
wie folgt:quelle
Anstatt Ihren Anwendungscode zu ändern, können Sie diesen Fehler vermeiden, indem Sie den Quellcode Ihres Android SDK patchen.
Wenn Sie auf den Fehler getClass () stoßen, wechseln Sie zur Deklaration der Methode (⌘B auf Mac). Dadurch wird zu einem Pfad wie z
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Jetzt in IntelliJ oder Android Studio:Object.java
beschreibbar durch die WahlFile -> Make File Writable
. Sie werden möglicherweise automatisch dazu aufgefordert, wenn Sie versuchen, die Datei zu bearbeiten.Entfernen Sie den unbegrenzten Platzhalter:
// Unbegrenzten Platzhalter (Klasse) entfernt, um zu vermeiden http://youtrack.jetbrains.com/issue/IDEA-72835 public final native Class getClass ();
Neuere Versionen von Android Studio scheinen unter einem Fehler zu leiden, der Sie daran hindert, die Datei zu bearbeiten, selbst nachdem Sie sie als beschreibbar deklariert haben. Kopieren Sie stattdessen den Pfad
Edit -> Copy Path
oder ⇧⌘C und bearbeiten Sie ihn in Ihrem bevorzugten Editor.Durch diese Änderung bleibt die Quellennavigationsfunktion erhalten. Andere Optionen:
getClass()
Erklärung auskommentieren.Object.java
Datei eine Nicht-Java-Erweiterung hinzufügen, zObject.java.in
.quelle
Object.java
auch nach dem Löschen des Nur-Lese-Flags nicht bearbeitet werden kann.instance.getClass()
(getClass()
funktioniert nur ). Das Umbenennen derObject.java
Datei zum Deaktivieren funktioniert.Wirf deine "getClass" auf ein Objekt, benutze
Verwenden Sie für diejenigen, die dieses Problem mit Fragmenten haben
quelle
Zuallererst ist das verwandte Android Studio-Problem hier . Bitte starte es, damit es etwas Aufmerksamkeit bekommt!
Auch das damit verbundene IntelliJ-Problem ist hier .
Eine gute Problemumgehung hierfür ist beispielsweise das Umbenennen
<sdk>/android-<platform>/java/lang/Object.java
inObject.java.XXX
. Dies verhindert, dass AS es sieht, und das Problem wird vermieden. Auf diese Weise können Sie natürlich nicht mehr einfach von AS aus zur Objektquelle navigieren.Sie können die Datei wieder in ihren ursprünglichen Namen umbenennen, wenn dieser Fehler behoben wird ...
quelle
Heute bin ich auf dasselbe Problem gestoßen, als ich ein neues Projekt erstellt habe. Ich habe mit einem anderen Projekt verglichen, das dieses Problem nicht hatte, und einen Unterschied festgestellt. Das alte Projekt wurde gegen "Android 4.2.2" erstellt, während das neue standardmäßig auf "Android API 19 Platform" eingestellt war. Ich habe das in "Android 4.2.2" geändert, was API 17 entspricht, und die rote Fehlermarkierung ist verschwunden. API 17 reicht für mein Projekt aus, damit ich es so belassen kann. Ich habe keine Ahnung, warum dies das Problem löst, um ehrlich zu sein.
quelle
Ich habe eine Lösung dafür gefunden, zumindest an meinem Ende. Es ist definitiv ein IntelliJ-Fehler, aber er scheint durch einen Konflikt zwischen den Klassen im Quellpfad und im Klassenpfad für das Android SDK verursacht zu werden.
Wenn Sie zu Projektstruktur> SDKs> {{Ihr Android SDK}} wechseln, entfernen Sie alle Android-Einträge von der Registerkarte Quellpfad. Das Problem bei dieser Problemumgehung besteht darin, dass Sie in IntelliJ / Android Studio keinen direkten Zugriff mehr auf Quellen haben.
Ich habe die gleichen Informationen auf dem Jetbrains Issue Tracker veröffentlicht. Hoffentlich sehen wir bald eine Lösung.
quelle
Verwenden Sie einfach fragment.class.getSimpleName ();
quelle