novembre
2012
Un article de karbos
Commentaires fermés Lorsqu’un projet intègre plusieurs librairies Open Source, il est parfois nécessaire de modifier le comportement d’une méthode d’un composant. Afin de ne pas surcharger votre projet avec la création de classes d’extension je vous propose de n’écrire que le morceau de code à modifier, directement au moment où l’on instancie le composant qui nous intéresse. Nous allons surcharger les méthodes à la volée!
C’est facile à maintenir et rapide à écrire. Techniquement, il s’agit de classes internes anonymes (inner anonymous class). C’est pas nouveau, mais on ne les voit pas souvent.
Pour l’exemple, nous allons surcharger la méthode toString() de la classe ArrayList de l’API java.util. Nous allons donc créer un simple projet console avec une méthode main :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 | public class InnerAnonymousClass { public static void main(String[] args) { //Création d'une instance de la classe interne anonyme qui étend la classe standard "ArrayList" List<String> developpeurs = new ArrayList<String>(){ @Override public String toString(){ //Si la liste est vide, on affiche "liste vide" if(size() == 0) return "Liste vide.\n"; //Sinon, on concatène une liste des valeurs StringBuilder sb = new StringBuilder("Liste des développeurs : \n"); for (int i = 0; i < size(); i++) { sb.append("\t- ").append(get(i)).append("\n"); } return sb.toString(); } }; //On affiche la liste vide System.out.println(developpeurs.toString()); //On remplit la liste developpeurs.add("Joshua J.Bloch"); developpeurs.add("James Gosling"); developpeurs.add("Doug Lea"); //On affiche la liste pleine System.out.println(developpeurs.toString()); //On clone la liste avec la classe ArrayList standard List<String> listeTemoin = new ArrayList<String>(developpeurs); //On appelle sa méthode toString pour comparer les résultats System.out.println(listeTemoin.toString()); } } |
En console on peut voir une belle implémentation de la méthode toString(), adaptée à notre projet console :
Liste des développeurs :
- Joshua J.Bloch
- James Gosling
- Doug Lea
Et l’implémentation standard adaptée à l’affichage dans le debugger d’Eclipse :
Restrictions : on ne peut pas faire hériter une classe (anonyme ou non) d’une classe marquée par le mot clé « final« .
Articles récents
Archives
Catégories
Commentaires récents
- kamel dans GWT 2.5 avec les plugin gwt-maven-plugin 2.5.0 et GXT3
- fxrobin dans Télécharger des images depuis et vers une base de données en utilisant JPA
- Blog de la rubrique java dans GWT et l’historique de navigation
- Blog de la rubrique java dans GWT 2.5 avec les plugin gwt-maven-plugin 2.5.0 et GXT3
- Le blog de Karbos dans GWT 2.5 avec les plugin gwt-maven-plugin 2.5.0 et GXT3


