J'ai une classe de base pour toutes mes activités ( ActivityBase
) qui elle-même dérive de android.app.Activity
. Dans onCreate, je souhaite exécuter une logique conditionnelle basée sur la classe enfant en cours d'exécution. Si SomeCustomActivity
et AnotherCustomActivity
étendent tous les deux ActivityBase
, comment puis-je déterminer dans la classe parente ( ActivityBase
) laquelle des deux est actuellement en exécuter un ?
Réponses
Trop de publicités?Dans certaines occasions, simplement cette ligne dans la classe parente résout ce problème. Il renvoie le nom de la classe "enfant" (pas le parent) :
this.getClass().getName() //String like "com.mycompany.myclassname"
this.getClass().getSimpleName() //String like "myclassname"
Voir ici pour une discussion plus approfondie : http://www.coderanch.com/t/324715/java/java/Getting-child-class-name-parent
Utilisez l'opérateur instanceof.
Supposons que vous ayez une classe de base et deux sous-classes nommées Base
, SubOne
et SubTwo
, si vous voulez vérifier si une variable ref
est une instance de SubOne
ou SubTwo
vous diriez :
if(ref instanceof SubOne){
}
else if(ref instanceof SubTwo){
}
Notez que : (ref instanceof Base)
renverra toujours true
.
Au lieu d'utiliser une instruction if, vous devez créer une méthode abstraite pour votre logique conditionnelle. Ensuite, demandez à la classe enfant d'exécuter le code qui lui convient.
Cela vous évitera également d'avoir à modifier la classe de base à chaque fois que vous créez une nouvelle classe enfant.
Vous pouvez également utiliser la méthode .getClass() du parent, puis vérifier comme ceci
if(parent.getClass().equals(childObj.class)){
//to do ..
}
Cela fonctionne essentiellement car il renvoie la classe d'objets d'exécution. Cela fonctionnera particulièrement dans le cas de classes abstraites - Essayé et testé récemment par moi dans mon projet.