106 votes

Quand utiliser le wrapper de classe et de type primitif

Quand je dois aller pour une classe wrapper sur les types primitifs? Ou Sur quelles circonstances je devrais choisir entre wrapper / types Primitifs?

72voto

pstanton Points 8807

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.

20voto

Matthew Flaschen Points 131723

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.

16voto

Cody Points 76

À 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.

9voto

jjnguy Points 62123

Je tiens seulement à utiliser le wrapper types de si vous avez.

En les utilisant vous ne gagnez pas beaucoup, outre le fait qu'ils sont Objects.

Et, vous perdez de surcharge lors de l'utilisation de la mémoire et le temps passé boxing/unboxing.

3voto

Mattias Holmqvist Points 384

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.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X