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

Nic*_*ckF 130 android android-studio

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

fragment.getClass().getSimpleName()
Run Code Online (Sandbox Code Playgroud)

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

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

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

Rit*_*une 255

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

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

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

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

  • 现在没关系...很多UPVOTES :) (20认同)
  • 修改代码以解决IDE中的错误并不是一个很好的解决方案. (11认同)
  • 我本来希望学习另一种解决方法:) (4认同)
  • 它不起作用,或者至少目前不起作用(Android Studio 0.8.9) (2认同)
  • 一年多以后,它仍然没有修复:( (2认同)

Jam*_*ald 73

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

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

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

    //删除无界通配符(Class)以避免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.

  • 实际上我认为这应该是公认的答案. (2认同)
  • [这里](https://code.google.com/p/android/issues/detail?can=2&start=0&num=100&q=getClass%20ambiguous%20method%20call&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&groupby= &sort =&id = 70135)是*Android Studio*错误报告. (2认同)

Anh*_*arp 9

将"getClass"转换为Object,使用

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

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

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

  • 对于Java IDE所要求的最臭名昭着的解决方案,这可能值得一枚金牌.将Java对象转换为对象,令人印象深刻的空虚. (6认同)
  • 实际上,您没有强制转换getClass()结果,而是将您现在(this)的对象强制转换为Object. (3认同)

BoD*_*BoD 8

首先,相关的Android Studio问题就在这里.请注明它,以便它可以得到一些关注!

相关的IntelliJ问题也在这里.

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

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