getClass() в абстрактном классе дает неоднозначный вызов метода



у меня есть абстрактный класс, и я пытаюсь использовать getClass() метод, так как мне понадобится информация из класса, расширяющего мой абстрактный класс. Пример такой:



public String getName() {
return getClass().getSimpleName();
}


однако IntelliJ сообщает об этом:



Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.


код работает нормально, но наличие десятков предупреждений об ошибках в моей IDE-это своего рода мой путь. Это нарушает мой рабочий поток с большим количеством ложных срабатываний.



почему эти ошибки показаны, и что я могу сделать, чтобы не видеть их?

503   5  

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

    Ничего не найдено.