Pourquoi existe-t-il des classes wrapper en Java?

Je sais ce qu’est une classe wrapper, ils encapsulent les types primitifs (par exemple, int, double, etc.) en objects de leur classe respective.

Mais pourquoi avons-nous besoin des classes Wrapper? Pourquoi ne pas simplement aller avec les types primitifs où nous les avons?

Plusieurs raisons possibles:

  • Alors qu’une valeur nulle est possible
  • Inclure dans une collection
  • Traiter de manière générique / polymorphe en tant qu’object avec d’autres objects

Par exemple, lorsque les wrappers sont utilisés dans Collections, vous pouvez avoir un ArrayList , mais pas un ArrayList identique à HashMap etc.

Java est un langage de programmation orienté object. Je pense que vous pourriez également demander – pourquoi avons-nous des primitifs et pourquoi tout n’est-il pas simplement un object?

Les concepteurs Java ont gardé les deux séparés pour garder les choses simples. Vous utilisez les wrappers lorsque vous avez besoin de types adaptés au monde orienté object – comme le polymorphism, les collections, etc. Vous utilisez les primitives lorsque vous avez besoin d’efficacité.

Les classes d’encapsuleur sont utilisées à la place des types primitifs lorsqu’un object est attendu.

Dans Collections, par exemple, une ArrayList peut contenir des instances de toute sous-classe de Object, mais comme les types primitifs ne sont pas des objects, ils ne peuvent pas être contenus dans ArrayList.

Les classes d’encapsuleur sont utilisées pour convertir n’importe quel type primitif en object. Les types de données primitifs ne sont pas des objects, ils n’appartiennent à aucune classe, ils sont définis dans le langage même. Tout en stockant dans des structures de données qui ne prennent en charge que des objects, il est nécessaire de convertir le type primitif en object en premier, nous allons donc à la classe wrapper.

Classe d’emballage:

  1. Java utilise des types primitifs, tels que int, char, double pour contenir les types de données de base pris en charge par le langage.

  2. Parfois, il est nécessaire de créer une représentation d’object de ces types primitifs.

  3. Ce sont des classes de collection qui ne traitent que de tels objects. Il faut envelopper le type primitif dans une classe.

  4. Pour satisfaire ce besoin, Java fournit des classes qui correspondent à chacun des types primitifs. Fondamentalement, ces classes encapsulent, ou enveloppent, les types primitifs dans une classe.

  5. Ainsi, ils sont communément appelés wrapper de type. Les encapsuleurs de types sont des classes qui encapsulent un type primitif dans un object.

  6. Les types d’encapsuleur sont Byte, Short, Integer, Long, Character, Boolean, Double, Float.

Java est un langage orienté object et tout ce que dit java est un object. Mais qu’en est-il des primitifs? Ils sont en quelque sorte omis dans le monde des objects, c’est-à-dire qu’ils ne peuvent pas participer aux activités de l’object, par exemple être renvoyés par une méthode en tant qu’object et ajoutés à une collection d’objects, etc. Pour résoudre ce problème, Java vous permet d’inclure les primitives dans la famille d’objects en utilisant ce qu’on appelle des classes d’encapsuleur.

Il y a trois raisons pour lesquelles vous pouvez utiliser un object Number plutôt qu’une primitive:

  1. Comme argument d’une méthode qui attend un object (souvent utilisé lors de la manipulation de collections de nombres).
  2. Pour utiliser des constantes définies par la classe, telles que MIN_VALUE et MAX_VALUE, qui fournissent les limites supérieure et inférieure du type de données.
  3. Utiliser des méthodes de classe pour convertir des valeurs vers et depuis d’autres types primitifs, pour convertir des chaînes et depuis des chaînes et pour convertir des systèmes numériques (décimal, octal, hexadécimal, binary).

Source à partir de:

Les classes de nombres

Une des raisons pragmatiques est que les objects peuvent être nuls, que les primitives ne peuvent pas *. Si je ne peux pas garantir qu’une fonction puisse renvoyer un int, l’utilisation du wrapper est le seul moyen de gérer le trafic attendu. L’autoboxing s’occupe du rest.