抽象类中的getClass()给出了Ambiguous方法调用

时间:2012-04-30 15:28:57

标签: java android intellij-idea

我有一个公共抽象类,我正在尝试使用getClass()方法,因为我需要来自扩展我的抽象类的类的信息。一个例子是:

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

然而,IntelliJ报告了这一点:

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

代码运行正常,但在我的IDE中有几十个错误警告是我的方式。它会带来很多误报,从而扰乱了我的工作流程。

为什么会显示这些错误,我怎么办才能看不到它们?

5 个答案:

答案 0 :(得分:93)

将此getClass()电话投向Object这样的

((Object) this).getClass()

为我解决问题(非抽象类)。 它并不好,但它正在发挥作用。

此外,从项目设置中操作Android SDK并从Android SDK中删除所有JDK jar解决了错误。当然,您必须在项目中引用它才能使用修复程序。

答案 1 :(得分:43)

代码很好,但在IntelliJ中是一个错误。

Error reportanother one

甚至还有一些错误报告,其中包含此问题的不同变体。正如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依赖项(resannotations.jar)。

编辑:很久以前,这个问题已经成为IntelliJ问题跟踪器的reported