Android Studio - Mehrdeutiger Methodenaufruf getClass ()
Bin ich mit Android Studio für mein Android-Anwendung.
Mein code funktioniert und kompiliert.
Vor kurzem, die IDE zeigt mir Fehler an (rote Linien) auf getClass folgenden code:
fragment.getClass().getSimpleName()
Aber immer noch die Anwendung kompiliert und ausgeführt wird.
Der Fehler ist:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
Kann jemand mir erklären um was es geht? und warum der code noch läuft?
InformationsquelleAutor der Frage NickF | 2013-08-29
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich denke, es ist ein bug in Android Studio. Wie wir wissen, Android Studio basiert auf der IntelliJ-Plattform-und die vorhandene Funktionalität von IntelliJ IDEA Community Edition.
Google hat es entwickelt in Zusammenarbeit mit JetBrains. Und der gleiche Fehler wird gemeldet geschehen in IntelliJ als gut.
Haben Sie einen Blick auf die Fehlerbericht
Nur Abhilfe zu diesem Thema ist die Besetzung der Instanz, die Sie anrufen
getClass()
auf, umObject
wie folgt:InformationsquelleAutor der Antwort Ritesh Gune
Anstatt ändern Sie Ihre Anwendung code, können Sie vermeiden, dieser Fehler durch patchen des Android-SDK-Quellcode.
Wenn du auf der getClass () - Fehler, gehen Sie auf die Deklaration der Methode (⌘B auf dem Mac). Dies wird die Navigation zu einem Pfad wie
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Nun, innerhalb der IntelliJ oder Android Studio:Object.java
beschreibbar, indem SieFile -> Make File Writable
. Möglicherweise werden Sie dazu aufgefordert, dies zu tun automatisch, wenn Sie versuchen, die Datei zu editieren.Entfernen Sie die unbounded wildcard:
//Entfernt unbounded wildcard (Klasse) zu vermeiden, http://youtrack.jetbrains.com/issue/IDEA-72835
public final native Class getClass();
Neueren Versionen von Android Studio erscheinen, leiden unter einem bug, der verhindert, dass Sie von der Bearbeitung der Datei auch nach der Deklaration als auch beschreibbar sind. Kopieren Sie stattdessen den Pfad, der
Edit -> Copy Path
oder ⇧⌘C, und Bearbeiten Sie Sie in Ihrem Lieblings-editor.Diese änderung wird beibehalten-source-navigation-Funktionalität. Andere Optionen:
getClass()
Erklärung.Object.java
Datei, z.B.Object.java.in
.InformationsquelleAutor der Antwort James Wald
Werfen Sie Ihre "getClass" auf ein Objekt, verwenden Sie
Für diejenigen, die dieses problem mit Fragmenten ist, verwenden
InformationsquelleAutor der Antwort AnhSirk Dasarp
Zunächst die zugehörige Android Studio Ausgabe ist hier.
Bitte Sterne es so, dass es einige Aufmerksamkeit!
Auch die damit verbundenen IntelliJ Problem ist hier.
Eine gute Abhilfe für dieses ist, benennen Sie
<sdk>/android-<platform>/java/lang/Object.java
zuObject.java.XXX
zum Beispiel. Dies wird verhindern, dass WIE von es zu sehen, und das Problem wird vermieden. Natürlich, dies zu tun, können Sie nicht mehr leicht zu navigieren, um die Quelle des Objekts von innerhalb ALS.Können Sie benennen Sie die Datei wieder in seinen ursprünglichen Namen, wenn dieser Fehler behoben wird...
InformationsquelleAutor der Antwort BoD
Heute lief ich in das gleiche problem, wenn ich ein neues Projekt erstellt. Ich im Vergleich zu einem anderen Projekt, das nicht über dieses problem und fand einen Unterschied. Das alte Projekt wurde mit "Android 4.2.2" während die neuen war standardmäßig auf "Android API 19 Plattform". Das habe ich geändert zu "Android 4.2.2" entspricht API 17 und die rote Fehler-marker verschwunden. API 17 ist ausreichend für mein Projekt, also kann ich ihn so lassen. Ich habe keine Ahnung, warum dies behebt das problem, um ehrlich zu sein.
InformationsquelleAutor der Antwort Uwe Post
Fand ich eine Lösung für dieses Problem, zumindest bei mir. Es ist definitiv ein IntelliJ bug, aber es scheint verursacht zu werden durch einen Konflikt zwischen den Klassen in der "sourcepath" und in den classpath für das Android SDK.
Wenn Sie gehen, um Projekt-Struktur > SDKs > {{Android-SDK}}, entfernen Sie alle Android-Einträge aus der "Sourcepath" - Registerkarte. Das problem mit dieser Problemumgehung ist, dass Sie nicht mehr den direkten Zugriff auf Quellen innerhalb von IntelliJ/Android Studio.
Ich gepostet habe die gleichen Informationen auf der Jetbrains issue trackeralso hoffentlich werden wir sehen, ein fix bald.
InformationsquelleAutor der Antwort kcoppock
Nur fragment.Klasse.getSimpleName();
InformationsquelleAutor der Antwort Sotti