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() {...}
 
}
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() {...}
 
}
Mes recherches m'ont conduit vers la classe java.lang.Void. Je peux alors faire du refectoring et obtenir le résultat suivant:

- Je définis d'abord mon interface commune à C1 et C2

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
public interface I<E> {
 
   public E m(); 
 
}
- Puis j'implémente C1

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() {...}
 
}
- 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
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.
   }
 
}
A première vue, mon objectif est atteint. Mais j'ai l'impression d'être passé à coté du vrai sens de la classe Void.

- 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.