2009-09-28 6 views

Répondre

3

Je ne pense pas qu'il y ait une raison en particulier. C'est une mauvaise pratique, IMO. Boolean.TRUE et Boolean.FALSE font tout ce dont vous avez besoin.

+2

Peut-être la peur du singleton ... – Geo

+0

Et 'Boolean.valueOf (boolean)' fonctionne quand vous ne savez pas ce dont vous avez besoin. –

+2

Ouais. L'énorme problème avec le code ci-dessus est qu'il crée d'abord le vrai littéral et ensuite crée un objet booléen en enveloppant le littéral :(C'est comme faire 'new String ("banana")' pour une raison quelconque – Malaxeur

1

De nos jours, avec autoboxing, vous pouvez écrire true et il sera automatiquement converti en new Boolean(true) si un objet Boolean (au lieu d'une boolean primitive) est attendue.

Toutefois, dans Java 1.4 et versions antérieures, cela n'est pas possible; il fallait créer l'objet Boolean explicitement. Le tutoriel que vous liez est de 2003, et à l'époque Java 5.0 (a.k.a. Java 1.5) n'avait pas encore été publié. Mais même dans ce cas, comme l'a noté Malaxeur, il aurait été préférable d'utiliser Boolean.TRUE.

+2

, il sera en fait converti en Boolean.valueOf (booleanVar), ce qui ne produira jamais de nouvelles instances mais utilisera uniquement Boolean.TRUE et Boolean.FALSE. –

0

C'est en fait très étrange car les Javadocs pour les booléens indiquent explicitement que ce n'est généralement pas une bonne idée http://java.sun.com/javase/6/docs/api/java/lang/Boolean.html. Peut-être que ce tutoriel est un peu vieux?

Détails du constructeur Boolean

Boolean (valeur booléenne) publique

Allocates a Boolean object representing the value argument. 

Note: It is rarely appropriate to use this constructor. Unless a new 

instance est nécessaire, l'usine statique valueOf (Boolean) est généralement un meilleur choix. Il est susceptible de donner nettement meilleure performance de l'espace et du temps .

Parameters: 
    value - the value of the Boolean 
0

La plupart du temps lorsque vous voulez un objet booléen, vous avez besoin des capacités d'un type de référence. Une méthode peut s'attendre à un objet, donc vous passez un booléen. Mais probablement le plus important est un booléen peut être nul aussi bien que vrai et faux. Supposons que vous ayez une banque avec une transaction booléenne réussie, true pour si oui, false pour sinon. Mais que se passe-t-il si la transaction n'a pas encore eu lieu? Vous pouvez le définir sur false, mais cela serait déroutant car il ne décrit pas correctement les données.

Ceci est un cas où un booléen est pratique, mais cela ne signifie pas que c'est toujours le bon choix. : D

0

Techniquement parlant, et comme le soutenaient Malaxeur et Thomas, il ne faut pas utiliser le constructeur Boolean(boolean value) mais utiliser Boolean.TRUE et Boolean.FALSE à la place. Cela est même documenté dans le JavaDoc depuis la version 1.4.2, bien que les objets Boolean.TRUE et Boolean.FALSE soient aussi vieux que jdk 1.0.1

Je ne crois pas que JAXB nécessite des instances uniques pour les valeurs de propriétés. Si c'était le cas improbable, il y aurait un avertissement explicite à pas d'utiliser Boolean.TRUE.

La seule raison pour laquelle je vois: ceci est un tutoriel et le code est amélioré vers la lisibilité. Si l'on lit 'new Boolean(true)', il est clair qu'une nouvelle instance booléenne est créée.'Boolean.TRUE' pourrait être, techniquement parlant, n'importe quel type et donc ne fait pas apparaître clairement à première vue, qu'un objet booléen est nécessaire dans cette méthode.

Questions connexes