Deux solutions ne nécessitent pas de passer dans l'objet de classe. Dans les deux cas, je suppose que puisque c'est une variable privée, vous êtes la seule personne à y mettre des choses, et le monde extérieur ne le voit pas.
Il suffit d'utiliser un simple tableau d'objets Object[]
. L'inconvénient est que vous perdrez les avantages des génériques et vous devrez jeter les choses qui en sortent, ce qui rend le code plus laid. Mais puisque vous êtes la seule personne à y mettre des choses, la distribution devrait toujours être sûre. L'extérieur n'a pas besoin de savoir ce qui se passe.
Les autres options sont une sorte de piratage. Vous créez un Object[]
, puis "cast" à T[]
. Techniquement, cela est illégal, car Object[]
et T[]
sont des types d'exécution différents et le premier ne peut pas être moulé à ce dernier. Mais tant que vous ne passez pas le tableau hors de la classe (par exemple, le renvoyer ou quelque chose), cela ne causera aucun problème car T[]
sera effacé de Object[]
de toute façon, et aucune conversion n'est réellement effectuée. Alors vous pouvez obtenir les avantages des génériques dans votre classe pour faciliter le codage, mais vous devez faire extrêmement attention de ne pas passer ce tableau à quiconque s'attend réellement à un T[]
, parce que ce n'est pas le cas.
Je suis d'accord - Les listes sont généralement une meilleure alternative pour plusieurs raisons. En fait, certaines personnes suggèrent que les tableaux doivent être considérés comme une partie déconseillée du langage dans Java 5+. Je ne dis pas que je suis l'un d'entre eux ... mais vous trouverez cette opinion. –
Les tableaux sont toujours valides pour les types primitifs. Mais pour les types de référence, c'est juste une optimisation inappropriée presque tout le temps. –