program tip

추상 클래스의 getClass ()는 모호한 메서드 호출을 제공합니다.

radiobox 2020. 11. 20. 08:50
반응형

추상 클래스의 getClass ()는 모호한 메서드 호출을 제공합니다.


getClass()내 추상 클래스를 확장하는 클래스의 정보가 필요 하므로 공개 추상 클래스가 있고 메서드 를 사용하려고합니다 . 예는 다음과 같습니다.

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

그러나 IntelliJ는 다음과 같이보고합니다.

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

코드는 잘 실행되지만 내 IDE에 수십 개의 오류 경고가 표시되는 것은 내 방식입니다. 많은 오탐으로 내 작업 흐름을 방해합니다.

이러한 오류가 표시되는 이유는 무엇이며이를 표시하지 않으려면 어떻게해야합니까?


내 주조 getClass()호출하는 것은하는 Object이 좋아

((Object) this).getClass()

나를 위해 (비 추상 클래스로) 문제를 해결합니다. 좋지는 않지만 작동합니다.

또한 프로젝트 설정에서 Android SDK를 조작하고 Android SDK에서 모든 JDK jar를 제거하면 오류가 해결됩니다. 물론 수정 사항을 활용하려면 프로젝트 내에서 참조해야합니다.


코드는 괜찮지 만 IntelliJ의 오류입니다.

오류보고 , 또 하나 .

이 문제의 다양한 변형에 대해 더 많은 오류 보고서가 있습니다. duffymo가 주석에서 지적했듯이 클래스 경로에 JDK의 다른 버전이 있기 때문일 수도 있습니다.


또 다른 해결 방법은 클래스를 가져 오는 도우미 메서드를 생성하는 것입니다.

public Class<?> type() {
    return super.getClass();
}

또는 정적 재사용 가능 유틸리티 :

public static final Class<?> type(Object object) {
    return object.getClass();
}

오류 발생 여부를 참조하는 Android 버전에 따라 다릅니다. 나는 Maven Central 연결 에서 Android 4.1.1.4대한 종속성을 정의했습니다 .pom.xml

<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()오류가 발생합니다.


Maven이 포함 된 Android 프로젝트가 있고을 Maven Android Platform프로젝트 SDK로 사용하여 IntelliJ로 가져 오는 경우 이러한 상황이 발생할 수 있습니다 . 문제는 Maven Android PlatformAndroid Maven 종속성 jar 모두 java.lang.Object클래스가 포함되어 있다는 것 입니다.

해결 방법은 프로젝트 구조 -> 플랫폼 설정 -> SDK- > Maven Android 플랫폼 -> Classpath로 이동하는 것 입니다. 실제로 JDK에있는 모든 항아리를 나열합니다. 모두 제거하면 두 개의 Android 종속성 만 남습니다 ( resannotations.jar).

편집 :이 문제는 이미 오래 전에 IntelliJ 문제 추적기에 보고 되었습니다 .

참고 URL : https://stackoverflow.com/questions/10386264/getclass-in-abstract-class-gives-ambiguous-method-call

반응형