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

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

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

但是,IntelliJ报告了这一点:

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

代码运行良好,但在我的IDE有几十个错误警告是在我的方式。 它以很多误报打乱了我的工作stream程。

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

像我这样将我的getClass()调用投射到Object

 ((Object) this).getClass() 

解决了我的问题(与非抽象类)。 这不是很好,但它的工作。

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

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

错误报告 , 另一个 。

甚至有更多的错误报告,这个问题的不同变化。 正如duffymo在评论中指出的那样,也可能是因为classpath中有不同版本的JDK。

另一个工作的解决方法是生成一个帮助器方法来获得类:

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

或静态可重用的实用程序:

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

我注意到这取决于您所引用的Android版本是否发生错误。 我曾经在连接到Maven Central的pom.xml为Android 4.1.1.4定义了依赖关系。

 <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类。

解决方法是goint到项目结构 – > 平台设置 – > SDK – > Maven的Android平台 – > 类path 。 它将实际列出所有在JDK中的jar。 删除所有这些,所以只剩下两个Android依赖项( resannotations.jar )。

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