64 votes

getClass() dans la classe abstraite donne Ambigu appel de la méthode

J'ai un public abstract class et je suis en train d'utiliser l' getClass() méthode, que j'ai besoin d'info à partir de la classe de prolonger ma classe abstraite. Un exemple est la suivante:

public String getName() {
    return getClass().getSimpleName();
}

Cependant, IntelliJ rapports ce:

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

Le code fonctionne très bien, mais avoir des dizaines d'avertissements d'erreur dans mon IDE est un peu à ma façon. Il perturbe mon flux de travail avec beaucoup de faux positifs.

Pourquoi sont ces erreurs qui s'affichent, et que puis-je faire pour ne pas les voir?

93voto

keyboardsurfer Points 7432

Casting mon getClass() appel à l' Object comme ceci

((Object) this).getClass()

résout le problème (avec les classes abstraites) pour moi. Ce n'est pas grand, mais il travaille.

Aussi, la manipulation de votre Android Sdk partir des paramètres de projet et la suppression de tous les JDK pots à partir de votre Android SDK permet de résoudre l'erreur. Bien sûr, vous aurez pour y faire référence dans votre projet pour utiliser le correctif.

43voto

Matsemann Points 4544

Le code est bien, mais c'est une erreur dans l'Ide.

Rapport d'erreur, un autre.

Il y en a même plus d'erreur rapports avec les différentes variantes de ce problème. Comme duffymo souligné dans les commentaires, il peut aussi être parce qu'il ya différentes versions du JDK dans le classpath.

5voto

pablisco Points 2478

Un autre travail solution de contournement consiste à générer une méthode d'assistance pour obtenir la Classe:

public Class<?> type() {
    return super.getClass();
}

ou statique réutilisables util:

public static final Class<?> type(Object object) {
    return object.getClass();
}

3voto

JJD Points 7539

J'ai remarqué que cela dépend de la version d'Android que vous référencez si l'erreur se produit ou pas. J'ai utilisé pour définir une dépendance pour Android 4.1.1.4 dans l' pom.xml de liant pour Maven Central.

<dependency>
    <groupId>com.google.android</groupId>
    <artifactId>android</artifactId>
    <version>4.1.1.4</version>
    <scope>provided</scope>
</dependency>

En attendant, je vous présente les dépendances nécessaires à l'aide de maven android-sdk-deployer.

<dependency>
    <groupId>android</groupId>
    <artifactId>android</artifactId>
    <version>4.3_r1</version>
    <scope>provided</scope>
</dependency>

Ensuite, getClass() produit l'erreur.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X