Pour par exemple,Pourquoi les tutoriels Java construisent-ils explicitement des booléens?
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
new Boolean(true));
Pour par exemple,Pourquoi les tutoriels Java construisent-ils explicitement des booléens?
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,
new Boolean(true));
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.
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
.
, 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. –
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
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
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.
Peut-être la peur du singleton ... – Geo
Et 'Boolean.valueOf (boolean)' fonctionne quand vous ne savez pas ce dont vous avez besoin. –
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