[Reflection] Recuperer la classe fille directe effective d'une classe mere abstr

cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 1 févr. 2010 à 21:12
cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012 - 3 févr. 2010 à 10:31
Salut à tous

Je me doute que ma question puisse être difficile à résoudre, mais je la pose quand même, on ne sait jamais. (Les recherches sur le forum avec reflection n'ont rien donné de satisfaisant, bien sûr). Sachez tout de même que même s'il n'y aurait pas de réponse satisfaisante, j'ai déjà implémenter une solution pour résoudre le problème. Mais le but du topic est justement d'améliorer le code actuellement utilisé.

Le code actuel
---------------------------------

Soit une classe Piece abstraite, elle admet pour filles Pion, Cavalier, Fou ... (Je suppose déjà que vous reconnaissez le type de jeu implémenté ) toutes concrètes.
La Piece abstraite definit actuellement une TEMPLATE METHOD et possede un tableau de Piece
protected Piece[][] plateau;

private boolean peutSeDeplacerDe(int grandXCase1, int grandYCase1,int grandXCase2, int grandYCase2){
       if(!this.pieceContenueDansCaseDeDepartEstDeClasseCourante(grandXCase1, grandYCase1)) return false;
       //autres conditions fausses à traiter => PEU D'IMPORTANCE A CE STADE DU DEVELOPPEMENT
       return true;
}

protected abstract boolean pieceContenueDansCaseDepartEstDeClasseCourante(int grandXCase1, int grandYCase1); // La methode integree dans la template e à redefinir par les filles


Toutes les classes filles auront du code qui ressembleront à celui de Pion
protected boolean pieceContenueDansCaseDepartEstDeClasseCourante(int grandXCase1, int grandYCase1){
       return this.plateau[grandXCase1][grandYCase1] instanceof Pion;
}


Ce que je veux faire
----------------------------------------------

Utiliser la reflection JAVA pour eviter de creer un PATTERN TEMPLATE METHODE juste pour créer l'artifice que j'ai fait => Le test du type réelle de l'instance de la Piece se fait dans la methode peutSeDeplaceDeCase1ACase2 de la classe abstraite Piece

Pour finir
-----------------------------------

Je vous avais bien dit que cette question risquait d'être tirée par les cheveux !!!
Mais je serais tout de même ravi et reconnaissant si quelqu'un parvenait à m'aider à améliorer ainsi l'organisation de mon code

Salut

Loloof64 : A défaut de progresser en compétences, je voudrais au moins éssayer de le faire dans la qualité du code.

1 réponse

cs_loloof64 Messages postés 342 Date d'inscription vendredi 1 septembre 2006 Statut Membre Dernière intervention 6 novembre 2012
3 févr. 2010 à 10:31
Je poste juste ce message pour vous signaler un petit problème, mes sections de code du message précédent ont été troquées

-> il s'agit bien de la méthode de signature protected boolean pieceContenueDansCaseDepartEstDeClasseCourante(int grandXCase1, int grandYCase1); dans la 1ere section
-> le code tronqué dans la 2e section est
return this.plateau[grandXCase1][grandYCase1] instanceof Pion
(et pour une classe <Y> heritant de Piece, ce sera
return this.plateau[grandXCase1][grandYCase1] instanceof <Y>

Merci d'avance pour vos aides si vous y parvenez
0
Rejoignez-nous