Android Studio-不明确的方法调用getClass()
我正在为我的Android应用程序使用Android Studio。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. 谁能给我解释一下这是怎么回事吗?为什么代码还在运行?我认为这是
我的代码可以工作并编译。
最近,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()
Edit->copy path
或⇧⌘C、 并在您最喜欢的编辑器中编辑它
此更改将保留源导航功能。其他选择:
- 您可以注释掉整个
声明getClass()
- 您可以在
文件的名称后附加非Java扩展名,例如Object.Java
Object.Java.in
/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中