我有一个公共抽象类,我正在尝试使用getClass()
方法,因为我需要来自扩展我的抽象类的类的信息。一个例子是:
public String getName() {
return getClass().getSimpleName();
}
然而,IntelliJ报告了这一点:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
代码运行正常,但在我的IDE中有几十个错误警告是我的方式。它会带来很多误报,从而扰乱了我的工作流程。
为什么会显示这些错误,我怎么办才能看不到它们?
答案 0 :(得分:93)
将此getClass()
电话投向Object
这样的
((Object) this).getClass()
为我解决问题(非抽象类)。 它并不好,但它正在发挥作用。
此外,从项目设置中操作Android SDK并从Android SDK中删除所有JDK jar解决了错误。当然,您必须在项目中引用它才能使用修复程序。
答案 1 :(得分:43)
代码很好,但在IntelliJ中是一个错误。
甚至还有一些错误报告,其中包含此问题的不同变体。正如duffymo在评论中指出的那样,也可能是因为类路径中有不同版本的JDK。
答案 2 :(得分:5)
另一个有效的解决方法是生成一个帮助方法来获取Class:
public Class<?> type() {
return super.getClass();
}
或静态可重用的util:
public static final Class<?> type(Object object) {
return object.getClass();
}
答案 3 :(得分:3)
我注意到它取决于您引用的Android版本是否发生错误。我曾经在pom.xml
链接到Android 4.1.1.4中定义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()
产生错误。
答案 4 :(得分:1)
如果您有一个包含Maven的Android项目,并且使用Maven Android Platform
作为项目SDK导入IntelliJ,则会发生这种情况。问题是Maven Android Platform
和Android maven依赖jar都包含java.lang.Object
类。
解决方法是goint to Project structure - &gt; 平台设置 - &gt; SDK - &gt; Maven Android平台 - &gt; 类路径。它将列出JDK中实际存在的所有jar。删除所有这些,因此只剩下两个Android依赖项(res
和annotations.jar
)。
编辑:很久以前,这个问题已经成为IntelliJ问题跟踪器的reported。