130

我正在为我的 Android 应用程序使用 Android Studio。
我的代码工作并编译。
最近,IDE 在以下代码的 getClass 上显示错误(红线):

fragment.getClass().getSimpleName()

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

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

有人可以解释一下它是怎么回事吗?为什么代码仍在运行?

4

7 回答 7

255

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

谷歌与 JetBrains 合作开发了它。据报道,同样的错误也发生在 IntelliJ 中。查看错误报告

此问题的唯一解决方法是将您调用的实例getClass()转换Object为如下:

((Object) this).getClass()
于 2013-08-29T08:53:21.080 回答
73

您可以通过修补 Android SDK 的源代码来避免此错误,而不是修改您的应用程序代码。

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

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

    // 移除无界通配符(类)以避免http://youtrack.jetbrains.com/issue/IDEA-72835 public final native Class getClass();

较新版本的 Android Studio 似乎存在一个错误,即使在将文件声明为可写后,您也无法编辑该文件。相反,请复制路径Edit -> Copy Path或⇧⌘C,然后在您喜欢的编辑器中进行编辑。

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

  • 您可以注释掉整个getClass()声明。
  • 您可以在文件名后附加一个非 Java 扩展名Object.java,例如Object.java.in.
于 2014-03-25T21:42:49.330 回答
9

将您的“getClass”转换为一个对象,使用

((Object) this).getClass()

对于那些对片段有此问题的人,请使用

((Object) fragment).getClass()
于 2013-10-07T06:43:17.840 回答
8

首先,相关的 Android Studio 问题在这里。请给它加星标,以便引起注意!

相关的 IntelliJ 问题也在这里

一个很好的解决方法是重命名<sdk>/android-<platform>/java/lang/Object.javaObject.java.XXX例如。这将阻止 AS 看到它,并且将避免该问题。当然,通过这样做,您不再可以轻松地从 AS 中导航到 Object 的源。

修复此错误后,您可以将文件重命名为原始名称...

于 2014-07-27T12:48:33.103 回答
2

今天我在创建一个新项目时遇到了同样的问题。我与另一个没有这个问题的项目进行了比较,发现了一个不同之处。旧项目是针对“Android 4.2.2”构建的,而新项目默认设置为“Android API 19 Platform”。我将其更改为等于 API 17 的“Android 4.2.2”,红色错误标记消失了。API 17 对于我的项目来说已经足够了,所以我可以这样保留它。老实说,我不知道为什么这可以解决问题。

于 2013-11-06T09:24:04.530 回答
1

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

于 2014-08-10T13:28:21.427 回答
1

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

如果您转到 Project Structure > SDKs > {{Your Android SDK}},请从 Sourcepath 选项卡中删除所有 Android 条目。此解决方法的问题是您不再可以直接访问 IntelliJ/Android Studio 中的源。

我已经在J​​etbrains 问题跟踪器上发布了相同的信息,所以希望我们能很快看到修复。

于 2014-02-20T23:05:59.690 回答