Je veux utiliser montanttr code> est une valeur qui contient occasionnellement une double valeur représentée sous forme de chaîne. double.parsedouble code> pour le lire dans un Double Code> Variable: Montantdbl CODE>. P> if(amountStr!=null)
this.amountDbl = Double.parseDouble(amountStr);
8 Réponses :
Vous obtenez une expression de conciseur si vous utilisez le opérateur ternaire :
import static pkg.UtilClass.parseDoubleSafely;
Vous pouvez également marquer la fonction utilitaire comme finale i>. Cela permettrait d'inliquer.
Si c'est statique, cela ne peut pas être remplacé de toute façon.
J'aime la suggestion d'une fonction d'utilité afin que les fichiers de l'OP ne soient pas jachées de tests pour NULL.
@Alexey - Selon ce fil: Stackoverflow.com/questions/1159087/inlining-in-java étant La finale ne fait aucune différence pour l'inlinage, du moins dans Hotspot.
@Cperkins Oui, je dois être d'accord. De plus, statique code> ne peut pas être remplacé.
Pourquoi ne pas l'initialiser à l'avance à une valeur "par défaut"?
if (amountDbl != /* some default value */)
//parse it
Je me demande quoi utiliser à la place de code> par défaut code> pour saisir quantitétr! = Par défaut code> apparaissent plus élégant que montanttr! = Null code>. Cela ne change certainement pas du tout la structure du code.
Vous pouvez toujours l'entourer d'essayer d'essayer ou d'utiliser un opérateur ternaire (comme Aioobe le faisait)
Ah, accrocher des exceptions d'exécution en particulier NPE ne sonne pas vraiment bien, n'est-ce pas?
Si le bloc d'essai contient un seul appel à une méthode statique, je pense que c'est bien d'attraper des NPES.
Eh bien, vous pouvez toujours le réduire pour attraper simplement (NullpointerException NPE) {...} Catch (NumberFormatException NFE) {...}
Ce n'est pas beaucoup mieux mais que vous pourriez faire:
this.amountDbl = Double.parseDouble(amountStr==null ? "" : amountString);
Mauvaise idée depuis double.parsedouble ("") code> jette une exception numérique.
Eh bien, j'ai supposé que ce code serait déjà enveloppé dans un essai..Catch de toute façon. Vous devez gérer NumberFormatxception au castro n'ayant pas de numéro valide.
Double.Parsedouble (Montanttr == null? "0.0": montantstring); code> pourrait être une meilleure idée.
Je suppose que cela dépend de la façon dont vous voulez gérer des doubles invalides. Voulez-vous faire défaut à un numéro ou souhaitez-vous sauter ou peut-être journaliser, sauter et continuer? Il y a beaucoup de possibilités.
Google GUAVA a un (Passez à Scala et utilisez le Modèle d'option ) p> li>
ul> T firstNonnull (T First, T seconde) Code> qui peut être utilisé comme double.Parsedouble (objets.firstnonnull (Montanttr, "0")) < / code> p> li>
J'utilise ceci: p>
double.Parsedouble (str.isempty ()? "0": STR); P>
ou p>
double.Parsedouble ((str == null || str.isempty ())? "0": STR); P>
Vous ne devriez vraiment pas recommander cela, ce n'est pas lisible et il fait un appel inutile dans le cas de 0. De cette façon, ce n'est pas un bon morceau de code
Pourrait être quelques années de retard pour répondre à cette question. La classe Numberutils dans org.apache.commons.lang3.Maath est une méthode créée à ce que vous demandez ( https://commons.apache.org/proper/commons-lang/apidocs/org/apache /Commons/lang3/math/numrutils.html#Createdouble-java.lang.string- ) P>
J'imitié d'initialiser un objet et j'avais besoin de convertir de la chaîne en double et courut dans des valeurs null de la chaîne. P>
a a = nouveau A (valeur1, valeur2 == null? NULL: double.Parsedouble (valeur2), valeur3 ....); P>
Si une opération sur un objet jette un
nullpointerexception code>, à quoi pensez-vous de faire de plus que de vérifier l'objet pour NULL?Le temps de calcul de la vérification de
null code> doit être des milliers de personnes plus courtes que la partie analysante.