Я использую Android Studio для своего Android-приложения.
Мой код работает и компилируется.
Недавно среда IDE выявила мне ошибку (красные линии) в getClass следующего кода:
fragment.getClass().getSimpleName()
Но все же приложение компилируется и запускается.
Ошибка:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
Кто-нибудь может мне объяснить, о чем это? и почему код все еще работает?
android
android-studio
NickF
источник
источник
Ответы:
Я думаю, что это ошибка в Android Studio. Как мы знаем, Android Studio основана на платформе IntelliJ и существующей функциональности IntelliJ IDEA Community Edition.
Google разработал его в сотрудничестве с JetBrains. Сообщается, что такая же ошибка возникает и в IntelliJ. Взгляните на отчет об ошибках
Единственный способ решения этой проблемы - привести экземпляр, который вы вызываете
getClass()
, кObject
следующему:источник
Вместо того, чтобы изменять код приложения, вы можете избежать этой ошибки , исправив исходный код Android SDK.
Когда вы столкнетесь с ошибкой getClass (), перейдите к объявлению метода (⌘B на Mac). Это приведет к переходу по пути, например
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Теперь в IntelliJ или Android Studio:Object.java
доступным для записи по выборуFile -> Make File Writable
. Вам может быть предложено сделать это автоматически, если вы попытаетесь отредактировать файл.Удалите неограниченный подстановочный знак:
// Удален неограниченный подстановочный знак (класс), чтобы избежать http://youtrack.jetbrains.com/issue/IDEA-72835 общедоступного final native Class getClass ();
В более новых версиях Android Studio обнаружена ошибка, из-за которой вы не можете редактировать файл даже после объявления его доступным для записи. Вместо этого скопируйте путь
Edit -> Copy Path
или ⇧⌘C и отредактируйте его в своем любимом редакторе.Это изменение сохранит функциональность навигации по исходному тексту. Другие варианты:
getClass()
декларацию.Object.java
файла расширение, отличное от Java , напримерObject.java.in
.источник
Object.java
редактировать даже после очистки флага только для чтения.instance.getClass()
(толькоgetClass()
работает). ПереименованиеObject.java
файла для его отключения работает.Передайте свой "getClass" объекту, используйте
Для тех, у кого проблема с фрагментами, используйте
источник
Прежде всего, здесь есть проблема, связанная с Android Studio . Пометьте его звездочкой, чтобы привлечь внимание!
Также здесь есть проблема с IntelliJ .
Хорошим обходным решением для этого является, например, переименование
<sdk>/android-<platform>/java/lang/Object.java
вObject.java.XXX
. Это не позволит AS его увидеть, и проблема будет устранена. Конечно, сделав это, вы больше не сможете легко перейти к источнику Object из AS.Вы можете переименовать файл обратно в его исходное имя, когда эта ошибка будет исправлена ...
источник
Сегодня я столкнулся с той же проблемой при создании нового проекта. Я сравнил с другим проектом, в котором не было этой проблемы, и обнаружил одно отличие. Старый проект был построен на «Android 4.2.2», в то время как новый по умолчанию был настроен на «Android API 19 Platform». Я изменил это на «Android 4.2.2», что соответствует API 17, и красный маркер ошибки исчез. Для моего проекта достаточно API 17, так что я могу оставить его как есть. Честно говоря, я понятия не имею, почему это решает проблему.
источник
Я нашел исправление для этого, по крайней мере, со своей стороны. Это определенно ошибка IntelliJ, но, похоже, она вызвана конфликтом между классами в пути к исходному тексту и в пути к классам для Android SDK.
Если вы перейдете в Структура проекта> SDK> {{Ваш Android SDK}}, удалите все записи Android на вкладке Sourcepath. Проблема с этим обходным путем заключается в том, что у вас больше нет прямого доступа к источникам из IntelliJ / Android Studio.
Я разместил ту же информацию о системе отслеживания проблем Jetbrains , так что, надеюсь, мы скоро увидим исправление.
источник
Просто используйте fragment.class.getSimpleName ();
источник