Android Studio-模糊方法调用 getClass()

我在 Android 应用程序中使用 Android Studio。
我的代码可以工作和编译。
最近,IDE 在 getClass 上显示了以下代码的错误(红线) : < br/>

fragment.getClass().getSimpleName()

但应用程序仍然可以编译和运行。
错误是:

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

谁能给我解释一下这是怎么回事? 为什么代码还在运行?

24557 次浏览

我认为这是 Android Studio 中的一个 bug。众所周知,Android Studio 基于 IntelliJ 平台和 IntelliJ IDEA 社区版的现有功能。

Google 与 JetBrains 合作开发了这个程序,同样的错误也发生在 IntelliJ 上。 查看错误报告

这个问题的唯一 解决办法是将您调用 getClass()的实例强制转换为 Object,如下所示:

((Object) this).getClass()

今天我在创建一个新项目时遇到了同样的问题。我比较了另一个没有这个问题的项目,发现了一个不同之处。旧的项目是基于“ Android 4.2.2”构建的,而新的项目默认设置为“ Android API 19 Platform”。我把它改为“ Android4.2.2”,等于 API 17,红色错误标记消失了。API 17对我的项目来说已经足够了,所以我可以就这样离开。说实话,我不知道这为什么能解决问题。

我找到了解决办法,至少在我这边。这肯定是一个 IntelliJ 错误,但它似乎是由 Android SDK 的源路径中的类和类路径中的类之间的冲突引起的。

如果您转到项目结构 > SDK > \{\{ Your Android SDK }} ,从 Sourcepath 选项卡中删除任何 Android 条目。这个解决方案的问题在于,您不再能够直接访问来自 IntelliJ/Android Studio 内部的源代码。

我已经在 飞行大脑问题追踪器上发布了相同的信息,所以希望我们很快就能看到修复。

与其修改应用程序代码,不如通过修补 Android SDK 的源代码来避免使用 这个窃听器

当遇到 getClass ()错误时,转到方法的声明(Mac 上的 something B)。这将导航到诸如 $ANDROID_HOME/sources/android-20/java/lang/Object.java之类的路径。现在,在 IntelliJ 或 Android Studio 中:

  • 选择 File -> Make File Writable使 Object.java可写。如果您尝试编辑文件,系统可能会提示您自动执行此操作。
  • 删除无界通配符:

    删除无界通配符(Class)以避免出现“ href =”http://youtrack.jetbrains.com/release/IDEA-72835“ > http://youtrack.jetbrains.com/issue/idea-72835 公共期末本地类 getClass () ;

Android Studio 的新版本似乎存在一个 bug,即使在声明文件为可写文件之后,也无法编辑该文件。相反,复制路径 Edit -> Copy Path或 something something C,并在您喜欢的编辑器中编辑它。

此更改将保留源代码导航功能。其他选项:

  • 您可以注释掉整个 getClass()声明。
  • 您可以在 Object.java文件的名称后面附加一个非 Java 扩展名,例如 Object.java.in

首先,与 Android Studio 相关的问题是 翻译: 奇芳,校对: 奇芳,校对: 奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳,奇芳。 请点亮它,这样它才能得到一些关注!

另外,相关的 IntelliJ 问题是 在这里

一个很好的解决办法是将 <sdk>/android-<platform>/java/lang/Object.java重命名为 Object.java.XXX。这将防止 AS 看到它,而且这个问题将被避免。当然,通过这样做,您不再能够轻松地从 AS 中导航到 Object 源。

您可以将文件重命名为其原始名称时,这个错误将被修复..。

只需使用 bragment.class.getSimpleName () ;