C'est venu comme une question j'ai demandé dans une interview récemment que quelque chose le candidat souhaité voir ajouter au langage Java. Il est communément identifié comme une douleur que Java n'a pas réifiée les génériques mais, quand on le pousse, le candidat ne pouvais pas vraiment me dire le genre de choses qu'il aurait pu étaient-ils là.
Bien sûr, parce que raw types sont admissibles en Java (et dangereux contrôles), il est possible de subvertir les génériques et jusqu'à la fin avec un List<Integer>
que (par exemple) contient String
s. De toute évidence, cela pourrait être rendue impossible ont des informations de type réifiée; mais il doit y avoir plus que cela!
Des gens pourraient publier des exemples de choses qu' ils veulent vraiment faire, ont été réifiée génériques disponibles? Je veux dire, évidemment, vous pourriez obtenir le type d'une List
lors de l'exécution - mais que voulez-vous faire avec ça?
public <T> void foo(List<T> l) {
if (l.getGenericType() == Integer.class) {
//yeah baby! err, what now?
EDIT: UNE mise à jour rapide de ce que les réponses semblent surtout préoccupés par la nécessité de passer en Class
comme un paramètre (par exemple, EnumSet.noneOf(TimeUnit.class)
). J'étais à la recherche de plus pour quelque chose le long des lignes de , où ce n'est tout simplement pas possible. Par exemple:
List<?> l1 = api.gimmeAList();
List<?> l2 = api.gimmeAnotherList();
if (l1.getGenericType().isAssignableFrom(l2.getGenericType())) {
l1.addAll(l2); //why on earth would I be doing this anyway?