getClass() в абстрактном классе дает неоднозначный вызов метода
у меня есть абстрактный класс, и я пытаюсь использовать getClass() метод, так как мне понадобится информация из класса, расширяющего мой абстрактный класс. Пример такой:
public String getName() {
return getClass().getSimpleName();
}
однако IntelliJ сообщает об этом:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
код работает нормально, но наличие десятков предупреждений об ошибках в моей IDE-это своего рода мой путь. Это нарушает мой рабочий поток с большим количеством ложных срабатываний.
почему эти ошибки показаны, и что я могу сделать, чтобы не видеть их?
5 ответов:
литье мое
getClass()вызовObjectтакой((Object) this).getClass()решает проблему (с не абстрактными классами) для меня. Это не здорово, но это работает.
кроме того, управление вашими Android SDK из настроек проекта и удаление всех JDK jars из вашего Android SDK устраняет ошибку. Конечно, вам придется ссылаться на него в рамках вашего проекта, чтобы использовать исправление.
код в порядке, но это ошибка в IntelliJ.
есть еще несколько отчетов об ошибках с различными вариантами этой проблемы. Как указал duffymo в комментариях, это также может быть связано с тем, что в пути к классам существуют разные версии JDK.
еще один рабочий обходной путь заключается в создании вспомогательного метода для получения класса:
public Class<?> type() { return super.getClass(); }или статический многоразовый util:
public static final Class<?> type(Object object) { return object.getClass(); }
Я заметил, что это зависит от версии Android, на которую вы ссылаетесь, происходит ли ошибка или нет. Я использовал, чтобы определить зависимость Android 4.1.1.4 на
pom.xmlпривязка к Maven Central.<dependency> <groupId>com.google.android</groupId> <artifactId>android</artifactId> <version>4.1.1.4</version> <scope>provided</scope> </dependency>между тем, я предоставляю необходимые зависимости с помощью maven-android-sdk-deployer.
<dependency> <groupId>android</groupId> <artifactId>android</artifactId> <version>4.3_r1</version> <scope>provided</scope> </dependency>затем
getClass()выдает ошибку.
Это может произойти, если у вас есть проект Android с Maven, и вы импортируете в IntelliJ с помощью
Maven Android Platformкак проект SDK. Проблема в том, что обаMaven Android Platformи Android Maven зависимость jar включает в себяjava.lang.Objectкласса.обходной путь идет к структура проекта ->Настройки Платформы ->SDK ->Maven Android Platform ->Classpath. Он будет перечислять все банки, которые находятся в JDK на самом деле. Удалите все из них, так что только два Android зависимость остается (
resиannotations.jar).EDIT: эта проблема уже была об этом сообщает к IntelliJ проблема трекер давно.
Comments