64

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

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

但是,IntelliJ 报告了这一点:

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

代码运行良好,但在我的 IDE 中有数十个错误警告有点不合我意。它以很多误报扰乱了我的工作流程。

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

4

5 回答 5

93

像这样getClass()拨打我的电话Object

((Object) this).getClass()

为我解决了问题(使用非抽象类)。这不是很好,但它正在工作。

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

于 2013-04-04T15:32:17.763 回答
43

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

报错又一个

甚至还有更多关于此问题的不同变体的错误报告。正如 duffymo 在评论中指出的那样,也可能是因为类路径中有不同版本的 JDK。

于 2012-04-30T16:26:17.027 回答
5

另一个解决方法是生成一个辅助方法来获取类:

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

或静态可重用工具:

public static final Class<?> type(Object object) {
    return object.getClass();
}
于 2014-01-22T12:04:58.617 回答
3

我注意到这取决于您引用的 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()产生错误。

于 2013-09-19T12:08:07.133 回答
1

如果您有一个带有 Maven 的 Android 项目,并且您使用Maven Android Platform项目 SDK 导入 IntelliJ,则可能会发生这种情况。问题是Maven Android PlatformAndroid maven依赖jar都包含java.lang.Object该类。

解决方法是转到Project structure -> Platform Settings -> SDK -> Maven Android Platform -> Classpath。它将列出实际上在 JDK 中的所有 jar。删除所有这些,因此只保留两个 Android 依赖项 (resannotations.jar)。

编辑:这个问题很久以前就已经报告给 IntelliJ 问题跟踪器了。

于 2014-11-08T13:40:31.543 回答