Estou usando o Android Studio para meu aplicativo Android.
Meu código funciona e compila.
Recentemente, o IDE mostra um erro (linhas vermelhas) em getClass do seguinte código:
fragment.getClass().getSimpleName()
Mas ainda assim o aplicativo compila e executa.
O erro é:
Ambiguous method call. Both
getClass () in Object and
getClass () in Object match.
Alguém pode me explicar sobre o que é? e por que o código ainda está em execução?
android
android-studio
NickF
fonte
fonte
Respostas:
Eu acho que é um bug no Android Studio. Como sabemos, o Android Studio é baseado na plataforma IntelliJ e na funcionalidade existente do IntelliJ IDEA Community Edition.
O Google o desenvolveu em cooperação com o JetBrains. E o mesmo bug também ocorre no IntelliJ. Dê uma olhada no relatório de erro
A única solução alternativa para esse problema é transmitir a instância que você chama
getClass()
, daObject
seguinte maneira:fonte
Em vez de modificar o código do aplicativo, você pode evitar esse bug corrigindo o código-fonte do SDK do Android.
Quando você encontrar o erro getClass (), vá para a declaração do método (⌘B no Mac). Isso irá navegar para um caminho como
$ANDROID_HOME/sources/android-20/java/lang/Object.java
. Agora, no IntelliJ ou no Android Studio:Object.java
gravável escolhendoFile -> Make File Writable
. Você pode ser solicitado a fazer isso automaticamente se tentar editar o arquivo.Remova o curinga ilimitado:
// Removido o curinga ilimitado (Classe) para evitar http://youtrack.jetbrains.com/issue/IDEA-72835 Classe pública final nativa pública getClass ();
As versões mais recentes do Android Studio parecem sofrer de um erro que impede você de editar o arquivo, mesmo depois de declará-lo como gravável. Em vez disso, copie o caminho
Edit -> Copy Path
ou ⇧⌘C e edite-o no seu editor favorito.Essa alteração preservará a funcionalidade de navegação de origem. Outras opções:
getClass()
declaração inteira .Object.java
arquivo, por exemploObject.java.in
.fonte
Object.java
a edição mesmo após a limpeza do sinalizador somente leitura.instance.getClass()
(getClass()
funciona apenas ). RenomearObject.java
arquivo para desativá-lo funciona.Converta seu "getClass" em um Objeto, use
Para aqueles que têm esse problema com fragmentos, use
fonte
Primeiro, a questão relacionada ao Android Studio está aqui . Por favor, estrele para que ele possa receber alguma atenção!
Também a questão IntelliJ relacionada está aqui .
Uma boa solução para isso é renomear
<sdk>/android-<platform>/java/lang/Object.java
para,Object.java.XXX
por exemplo. Isso impedirá que o AS o veja e o problema será evitado. Obviamente, ao fazer isso, você não poderá mais navegar facilmente para a origem do Object no AS.Você pode renomear o arquivo de volta ao seu nome original quando esse bug for corrigido ...
fonte
Hoje, tive o mesmo problema quando criei um novo projeto. Comparei com outro projeto que não teve esse problema e encontrou uma diferença. O projeto antigo foi desenvolvido no "Android 4.2.2", enquanto o novo foi definido por padrão como "Android API 19 Platform". Alterei isso para "Android 4.2.2", que é igual à API 17 e o marcador de erro vermelho desapareceu. A API 17 é suficiente para o meu projeto, para que eu possa deixar assim. Não sei por que isso resolve o problema, para ser sincero.
fonte
Encontrei uma solução para isso, pelo menos do meu lado. Definitivamente, é um bug do IntelliJ, mas parece ser causado por um conflito entre as classes no caminho de origem e no caminho de classe para o SDK do Android.
Se você for para Estrutura do projeto> SDKs> {{Your Android SDK}}, remova quaisquer entradas do Android da guia Caminho da origem. O problema com esta solução alternativa é que você não tem mais acesso direto às fontes no IntelliJ / Android Studio.
Publiquei as mesmas informações no rastreador de problemas do Jetbrains , então esperamos ver uma correção em breve.
fonte
Basta usar fragment.class.getSimpleName ();
fonte