Cette page présente une série de recommandations assez générales relatives à la conception.
Ceci est un ensemble de recommandations d'implémentations qui peuvent s'appliquer dans des cas généraux. Cela ne vous empêche pas d'aller à l'encontre de ces règles et à réfléchir à votre cas qui peut être particulier.
Généralités
instanceof or not instanceof
Il est souvent préférable d'utiliser le polymorphisme plutôt que l'instruction instanceof. Cela rend le code moins rigide et plus extensible. En plus, le code en sera que plus explicite. Je pense qu'il faut toujours se poser la question lorsque l'on utilise instanceof. Ne devrais-je pas faire un refactoring et passer par le polymorphisme pour éviter cela ? Parfois, ce travail peut aussi s'avérer lourd par rapport au gain qu'il apporte, il faut alors peser le pour du contre.
Dans certains cas, se passer du mot clé instanceof sera trop compliqué, voire impossible.
equals
La méthode equals d'une class doit être implémentée lorsque 2 objets de cette classe peuvent être considérés comme logiquement identiques.
Pour implémenter la méthode equals, il faut suivre les règles suivantes :
Vérifier la comparaison avec this
Comparer les attributs pertinents par rapport à votre comparaison logique
Appeler super.equals() lorsqu'une classe de base autre que Object implémente la méthode equals
Choisir d'utiliser :
getClass() : c'est le cas le plus courant qui vous permettra de comparer des objets de classe identique)
ou d'utiliser instanceof pour implémenter equals() et comparer des objets de classes dérivées. Cela peut engendrer des complications provoquant des relations d'égalité non symétriques si la classe de base et la classe dérivée implémentent un méthode equals().
Performances
Utiliser System.arrayCopy() pour copier des tableaux
Cette méthode est très performante car elle est implémentée comme une méthode native.
Utiliser des tableaux d'objets plutôt que des Vector ou ArrayList
Si vous n'avez pas réellement besoin des fonctionnalités d'une List et si vous voulez améliorer les performances, utiliser plutôt un tableau d'objets. Si vous n'avez pas besoin de synchronisation, n'utilisez pas de Vector mais un ArrayList.
Réutiliser les objets.
Il est souvent plus économique de réutiliser un objet existant plutôt que d'en créer un nouveau.