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

Mat*_*ann 64 java android intellij-idea

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

public String getName() {
    return getClass().getSimpleName();
}
Run Code Online (Sandbox Code Playgroud)

但是,IntelliJ报告了这个:

Ambiguous method call. Both
getClass    ()    in Object and
getClass    ()    in Object match.
Run Code Online (Sandbox Code Playgroud)

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

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

key*_*fer 93

把我的getClass()电话Object投下这样的话

((Object) this).getClass()
Run Code Online (Sandbox Code Playgroud)

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

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

  • 令人难以置信的难看,但它的工作.谢谢! (7认同)
  • 这也解决了我在Abstract类中的问题. (2认同)
  • 需要修复IDEA,而不是破解我们的代码并让它看起来更丑.this.anyMethod()有其后果. (2认同)

Mat*_*ann 43

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

错误报告, 另一个.

甚至还有一些错误报告,其中包含此问题的不同变体.正如duffymo在评论中指出的那样,也可能是因为类路径中有不同版本的JDK.

  • 值得注意的是,这只是一个内省错误,编译和运行项目仍然可以正常工作. (6认同)

pab*_*sco 5

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

public Class<?> type() {
    return super.getClass();
}
Run Code Online (Sandbox Code Playgroud)

或静态可重用的util:

public static final Class<?> type(Object object) {
    return object.getClass();
}
Run Code Online (Sandbox Code Playgroud)