Salut,
J'ai pas mal de generics dans mon code, parfois ça devient vraiment très long.
Par exemple, j'ai une classe Job qui a 2 paramètres : S le type de flux, M le type de "plateforme multimédia" (lecteur, enregistreur ...).
Donc à chaque fois que je le trimbale, j'ai:
Job<? extends Stream, ? extends MultimediaCenter> job;
(et oui car:
1 2
| Job<?,?> job = ...;
job.getStream(); //retourne un Object |
)
Donc déjà c'est un peu lourd.
Maintenant, on peut programmer des "jobs", en ayant une plateforme multimédia préférée (qui n'est pas forcément égale à celle du Job, mais du même type).
Donc ma classe programmation est déclarée comme ça:
public class Programmation<J extends Job<? extends Stream, M>, M extends MultimediaCenter>
Bon là, vous voyez le bordel pour déclarer une variable de type programmation !
Programmation<? extends Job<? extends Stream, ? extends MultimediaCenter>, ? extends MultimediaCenter> programmation;
Je ne vous explique pas les Collections de programmations lol...
N'y aurait-il pas comme sur les méthodes (generic de méthode) un générique de classe, du genre:
public <M extends MultimediaCenter> class Programmation<? extends Job<?, M>>
(évidemment ceci ne marche pas)
On gagnerait déjà un paramètre (qui est toujours le même que le 2e de Job).
EDIT: Il y aurait bien
public class Programmation<S extends Stream, M extends MultimediaCenter>
et utiliser Job<S,M> au lieu de J, mais ça n'est pas équivalent...
EDIT 2: En pratique, je pense que je vais simplement virer les generics, et juste utiliser la covariance pr avoir le bon type, car on ne manipule que le type réel à chaque fois, qui n'a pas de generics (car PlayingJob extends Job<Playable,Player> en gros). Le problème se poserait pour d'éventuels setters...
Mais sur le principe ça m'intéresse d'avoir des idées de conception.
Partager