Quand je dois aller pour une classe wrapper sur les types primitifs? Ou Sur quelles circonstances je devrais choisir entre wrapper / types Primitifs?
Réponses
Trop de publicités?D'autres ont mentionné que certaines constructions telles que les Collections nécessitent des objets, et que les objets ont plus de ressources que de leur primitive homologues (la mémoire et la boxe).
Une autre considération est:
Il peut être pratique d'initialiser les Objets à null, ou envoyer les paramètres null dans une méthode ou un constructeur pour indiquer l'état ou de la fonction. Cela ne peut être fait avec les primitives.
De nombreux programmeurs initialiser les nombres de 0 (par défaut) ou -1 pour signifier cela, mais, selon le scénario, cela peut être inexactes ou trompeuses.
Ce sera également l'ensemble de la scène pour un NullPointerException quand quelque chose est mal utilisé, ce qui est beaucoup plus programmeur de l'environnement que certains arbitraire bug en bas de la ligne.
En général, vous devez utiliser les types primitifs, sauf si vous avez besoin d' un objet pour une raison quelconque (par exemple, pour mettre dans une collection). Même alors, envisager une autre approche qui ne nécessite pas un objet si vous souhaitez optimiser les performances numérique. Cela est conseillé par la documentation, et cet article montre comment l'auto-boxing peut provoquer une grande différence de performances.
À mon avis, si mes membres de la classe sont wrapper variables, il ne repose pas sur des valeurs par défaut, qui est le développeur comportement respectueux.
1.
class Person {
int SSN ; // gets initialized to zero by default
}
2.
class PersonBetter {
Integer SSN; //gets initialized to null by default
}
Dans le premier cas, vous ne pouvez pas garder le SSN valeur non initialisée. Il peut faire mal si vous n'êtes pas vérifier si la valeur a été mis en avant d'essayer de l'utiliser.
Dans le second cas, vous pouvez garder le SSN initialisé avec la valeur null. Ce qui peut conduire à NullPointerException mais c'est mieux que sans le savoir, l'insertion des valeurs par défaut(zéro) comme le SSN dans la base de données chaque fois que vous essayez de l'utiliser sans l'initialisation de champ SSN.
Les Collections sont un cas typique pour la simple wrapper Java des objets. Cependant, vous pourriez envisager de donner à l'Wrapper une signification plus spécifique dans le code (valeur de l'objet).
À mon humble avis il n'y a presque toujours un avantage à utiliser des objets de valeur lorsqu'il s'agit de la lisibilité et de la maintenance du code. Emballage simple des structures de données à l'intérieur des objets quand ils ont certaines responsabilités souvent simplifie le code. C'est quelque chose qui est très important dans le Domain-Driven Design.
Il y a bien sûr la question de performance, mais j'ai tendance à ignorer jusqu'à ce que j'ai la possibilité de mesurer les performances avec les données appropriées et de faire plus d'actions dirigées vers la zone problématique. Il peut aussi être plus facile de comprendre le problème de performances si le code est facile à comprendre.