Bonjour à tous,
J'ai un problème de design et je voudrais avoir votre avis.
J'ai deux classes pour les quelles j'ai besoin de trouver un super type. Mais l'une des méthodes me pose problème. Comme le montre le code ci-dessus, ma méthode retourne soit un Object soit elle ne retourne rien.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class C1 { // La méthode retourne un Object public Object m() {...} }Mes recherches m'ont conduit vers la classe java.lang.Void. Je peux alors faire du refectoring et obtenir le résultat suivant:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class C2 { // La méthode ne retourne rien public void m() {...} }
- Je définis d'abord mon interface commune à C1 et C2
- Puis j'implémente C1
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 public interface I<E> { public E m(); }
- Enfin j'implémente la classe C2 avec le fameux type Void
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 public class C1 implements I<Object> { // La méthode retourne un Object public Object m() {...} }
A première vue, mon objectif est atteint. Mais j'ai l'impression d'être passé à coté du vrai sens de la classe Void.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 public class C1 implements I<Void> { // La méthode ne retourne rien public Void m() { ... return null; // Cette valeur ne sera jamais utilisée. } }
- Qu'en pensez-vous? Avez-vous déjà travaillé avec cette classe? Pour quoi faire?
- Void est-il à void ce que Integer est à int (i.e. un wrapeur)?
- J'ai l'impression que la seule utilité de Void est dans du code de réflexion. Qu'en pensez-vous?
- Si ma solution ne fait pas de sens, comment pourrais-je m'y prendre?
Merci d'avance pour vos réponses et commentaires.
Partager