Quelle est la raison pour laquelle les classes Wrapper (comme Integer, Double, etc.) n'ont pas de setter pour leur valeur primitive interne ?
Je pose cette question parce que ce genre de fonctionnalité aurait simplifié les calculs, et aurait rendu le langage Java un peu plus flexible.
Laissez-moi vous donner quelques exemples.
1) Prenons l'exemple suivant :
Integer x = new Integer(5);
x++;
Le code précédent, en coulisses, effectue une autoboxing. Quelque chose comme :
int x_tmp = x.intValue();
x_tmp++;
x = new Integer(x_tmp); // Oui, c'est une nouvelle allocation mémoire
En raison de ce problème, effectuer des calculs sur un Wrapper est plus lent que sur des types primitifs simples. Avec un setter, il aurait été plus facile d'augmenter la valeur interne, sans allouer un autre objet dans le tas.
2) Un autre problème qui me dérange est qu'il est impossible en Java d'écrire une fonction d'échange comme je peux le faire en C (en utilisant des pointeurs) ou en C++ (pointeurs ou références).
Si j'écris void swap(Integer x, Integer y)
je ne peux pas accéder à la valeur interne et il me sera impossible de permuter les valeurs.
PS : Un ami m'a suggéré de considérer le point de vue plus large, et de penser en termes de concurrence et d'immutabilité des types.
Alors avez-vous une explication à cela ? Merci !