Android Studio-不明确的方法调用getClass()

Android Studio-不明确的方法调用getClass(),android,android-studio,Android,Android Studio,我正在为我的Android应用程序使用Android Studio。 我的代码可以工作并编译。 最近,IDE在getClass上显示以下代码的错误(红线): fragment.getClass().getSimpleName() 但应用程序仍在编译和运行。 错误是: Ambiguous method call. Both getClass () in Object and getClass () in Object match. 谁能给我解释一下这是怎么回事吗?为什么代码还在运行?我认为这是

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

fragment.getClass().getSimpleName()
但应用程序仍在编译和运行。
错误是:

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

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

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

谷歌已经与JetBrains合作开发了它。同样的错误也发生在IntelliJ中。 看一看这本书

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

((Object) this).getClass()
将“getClass”强制转换为对象,使用

((Object) this).getClass()
对于那些有碎片问题的人,使用

((Object) fragment).getClass()

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

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

如果转到Project Structure>SDK>{{Your Android SDK}},请从Sourcepath选项卡中删除所有Android条目。此解决方案的问题在于,您不再能够从IntelliJ/Android Studio中直接访问源代码


我已经在上发布了相同的信息,希望我们能很快看到修复。

您可以通过修补Android SDK的源代码来避免修改应用程序代码

当遇到getClass()错误时,请转到该方法的声明(⌘B在Mac上)。这将导航到一个路径,如
$ANDROID\u HOME/sources/ANDROID-20/java/lang/Object.java
。现在,在IntelliJ或Android Studio中:

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

    //删除了无界通配符(类)以避免 公共最终本机类getClass()

Android Studio的较新版本似乎存在一个bug,该bug阻止您编辑文件,即使在声明该文件为可写文件后也是如此。而是复制路径,
Edit->copy path
或⇧⌘C、 并在您最喜欢的编辑器中编辑它

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

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

首先,Android Studio的相关问题是。 请给它加上星星,这样它可以引起一些注意

另外,相关的IntelliJ问题是

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


修复此错误后,您可以将文件重命名回其原始名称…

只需使用fragment.class.getSimpleName()

可能的重复我得到了相同的错误,但我仍然可以很好地组装和运行应用程序。事实上,您并没有强制转换getClass()结果,而是将您现在所在的对象(这)作为对象来处理。这可能值得一枚金牌,因为Java IDE所要求的最臭名昭著的解决方法。将Java对象转换为对象,令人印象深刻的真空度。现在不重要了。。。如此之多的投票:)@RiteshGune请看下面我的答案修改代码以解决IDE中的错误不是一个很好的解决方案。它不起作用,或者至少在一年多之后(Android Studio 0.8.9)目前还不起作用,而且它仍然没有得到修复:(James Wald,回答很好,+1事实上我认为这应该是公认的答案。更新了答案以反映这样一个事实,即Android Studio有一个bug,即使在清除只读标志后也不允许编辑
Object.java
。这是Android Studio bug报告。仅对getClass方法进行注释会导致IntelliJ/Studio抱怨关于
instance.getClass()
(只有
getClass()
有效)。重命名
Object.java
文件以禁用它确实有效。现在有一个修复程序。它可能会包含在v0.9.3中