추상 클래스의 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 Platform
Android Maven 종속성 jar 모두 에 java.lang.Object
클래스가 포함되어 있다는 것 입니다.
해결 방법은 프로젝트 구조 -> 플랫폼 설정 -> SDK- > Maven Android 플랫폼 -> Classpath로 이동하는 것 입니다. 실제로 JDK에있는 모든 항아리를 나열합니다. 모두 제거하면 두 개의 Android 종속성 만 남습니다 ( res
및 annotations.jar
).
편집 :이 문제는 이미 오래 전에 IntelliJ 문제 추적기에 보고 되었습니다 .
참고 URL : https://stackoverflow.com/questions/10386264/getclass-in-abstract-class-gives-ambiguous-method-call
'program tip' 카테고리의 다른 글
list.files ()와 같이 디렉토리 내의 디렉토리 목록을 얻는 방법 대신 "list.dirs ()" (0) | 2020.11.20 |
---|---|
Eclipse의 프록시 설정을 사용하지 않는 Maven 플러그인 (0) | 2020.11.20 |
Google Apps Script에서 콘솔로 인쇄 하시겠습니까? (0) | 2020.11.20 |
생성자 코드가 Java에서 실행되기 전에 필드가 초기화됩니까? (0) | 2020.11.20 |
스트림에서 Collections.toMap ()을 사용할 때 List의 반복 순서를 어떻게 유지합니까? (0) | 2020.11.20 |