Pourquoi les collections Java ne peuvent-elles pas stocker directement des types Primitives? – investir sur crypto

Actualité bitcoin


C’était une décision de conception Java que certains considèrent comme une erreur. Les conteneurs veulent que les objets et les primitives ne dérivent pas d’Object.

C'est un endroit que les concepteurs .NET ont appris de la machine virtuelle Java et ont implémenté les types de valeur et les génériques, de sorte que la boxe est éliminée dans de nombreux cas. Dans CLR, les conteneurs génériques peuvent stocker des types de valeur dans le cadre de la structure de conteneur sous-jacente.

Java a choisi d’ajouter 100% de support générique au compilateur sans le support de la machine virtuelle Java. La JVM étant ce qu’elle est, ne supporte pas un objet "non-objet". Les génériques Java vous permettent de prétendre qu'il n'y a pas de wrapper, mais vous payez quand même le prix de performance de la boxe. Ceci est IMPORTANT pour certaines classes de programmes.

La boxe est un compromis technique, et j’ai le sentiment que ce sont des détails de mise en œuvre qui se perdent dans le langage. L'autoboxing est un bon sucre syntaxique, mais reste un inconvénient pour la performance. Si vous voulez, j'aimerais que le compilateur m'avertisse quand il fait une liste automatique. (Pour autant que je sache, c'est peut-être maintenant, j'ai écrit cette réponse en 2010).

Une bonne explication sur SO de la boxe: pourquoi certaines langues ont besoin de boxe et de déballage?

Et critique des génériques Java: Pourquoi certains prétendent-ils que la mise en œuvre des génériques par Java est mauvaise?

Dans la défense de Java, il est facile de regarder en arrière et de critiquer. La JVM a résisté à l'épreuve du temps et constitue une bonne conception à bien des égards.



Traduit depuis https://stackoverflow.com/questions/2504959/why-can-java-collections-not-directly-store-primitives-types