Christophe Jacquet — Carnet — Mot-clé : Programmation

Joies des generics

Voici un problème de Java qui a l'air insoluble : je veux faire une méthode qui me renvoie un tableau d'un type générique T, sachant que pour générer ledit tableau, j'utilise temporairement un ArrayList<T>. Problème : comment récupérer de façon type safe le tableau à partir de l'ArrayList<T>, sachant que je dispose d'une méthode toArray() qui renvoie un Object[] et toArray(T[]) qui renvoie un T[] ?

Première idée

public static <T> T[] truc(T a) {
	List<T> liste = new ArrayList<T>();
	liste.add(a);
	return liste.toArray(new T[] {});
}

Ça ne compile pas, parce que Java ne peut pas instancier de tableaux du type paramètre T (en raison de l'erasure, i.e. la suppression des types paramètres lors de la compilation, la JVM ne saurait tout simplement pas quelle classe instancier[1]).

Deuxième idée

Étant incapable d'instancier un T[], je décide donc de me rabattre sur la méthode qui me renvoie un Object[], et caster vers T[] :

	...
	return (T[]) liste.toArray();
	...

Sauf que le compilateur Java génère un warning « unchecked cast ». Ça compile et ça marche, mais on perd la type safety (qui n'est garantie que la compilation du projet entier ne génère aucun « unchecked cast »).

Des idées meilleures qu'un @SuppressWarnings("unchecked") ?

Notes

[1] Java interdit aussi l'instanciation de types génériques du genre List<String>[], mais c'est un autre problème, lié à la covariance des tableaux... Les deux problèmes sont très bien expliqués chez IBM.

Server Spy, développement, etc.

Grâce à de nombreux retours, j'ai pu corriger des bugs dans Server Spy et proposer une version 0.1.1. Le reviewer du site Firefox Add-ons a été très réactif, mais lorsqu'il s'est agi de propager le nouveau fichier sur le FTP, il y a eu quelques minutes de retard, d'où l'angoisse d'un utilisateur !

Ceci me conduit à un début de liste de « trucs » pour le développement d'extensions à Mozilla:

  • le livre « Creating Applications with Mozilla » (O'Reilly) est très bien. Même s'il date un peu (2002), il est en grande partie toujours d'actualité pour Firefox 1.5. Par contre, attention, il y a pas mal de typos (mauvaise capitalisation des noms de fonction notamment), donc il faut faire attention ;
  • sur le web, developer.mozilla.org, XUL Planet ;
  • l'extension FireBug est très pratique pour détecter les exceptions JavaScript levées par ses extensions ;
  • il y a plein de bonnes choses dans l'Extension Developer Extension, notamment le très pratique « reload all chrome ». Ceci dit, cette fonction m'a créé quelques soucis (perte de contexte JavaScript) ;
  • lorsqu'on teste une extension, penser à désactiver toutes les autres extensions. J'en étais ainsi venu à croire que Server Spy marchait correctement, alors que ce n'était pas le cas si une extension manquait (je n'ai même pas pu identifier laquelle...)

En parlant de développement, un geek de mes amis a publié des choses intéressantes : solveur de Sudoku en Java, logueur d'URL qui passent sur IRC en Perl.

Server Spy

Ma première extension pour Firefox (1.5 et plus) est disponible. Elle s'appelle Server Spy, et affiche le nom des serveurs web (Apache, IIS, etc.) qui propulsent les sites web visités. Pour un onglet donné, le nom du serveur est indiqué en bas à droite, dans la barre d'état de Firefox. Bref, un truc de geek :-)

Si vous l'essayez, n'hésitez pas à m'envoyer vos rapports de bugs et vos demandes de fonctionnalités.

Mise à jour (9 février, 19h45) : Server Spy est désormais distribué sur Mozilla Update. En quelques heures, plein de téléchargements, des commentaires sympas, des suggestions, un rapport de bug, que demande le peuple ? Ce qui m'embête par contre, c'est que je n'arrive pas à reproduire le bug qui m'a été signalé...

page 2 de 2 -

Valid HTML5? © .
Propulsé par DotClear.