8
votes

Pourquoi Integer ne résout pas la chaîne nulle

Classe entier contient une méthode pour convertir la chaîne en entier:

  1. integer.parseint (null); Paramètre: String Retour: int, donc je m'attendais lorsque le paramètre est NULL Ceci est NPE NPE

  2. INTEGER.VALUEOF (NULL); Paramètre: String Retour: Entier, donc je m'attendais lorsque le paramètre est NULL, cela devrait renvoyer NULL. Mais cette condition préalable était fausse et je demande pourquoi il n'y a pas de tel méthode qui peut gérer cette situation?


4 commentaires

Le Javadoc dit: "NumberFormatxception - si la chaîne ne contient pas un entier d'ailesable". Est-ce ce que vous obtenez?


Ce n'est pas un comportement dont vous devriez généralement avoir besoin de compter sur (renvoyer NULL sur un paramètre NULL), donc ce n'est généralement pas un problème. Si vous avez besoin de vous fier à ce sujet, créez simplement une méthode utilitaire qui l'enveloppe et traite avec NULL de la manière souhaitée?


@Edwindalorzo Nope. Ma question est pourquoi il y a une nouvelle méthode qui peut gérer avec NULL String. Il est si difficile de créer si (valeur == null) renvoie NULL Sinon Retard ValueOf (valeur)?


Donc, vous dites que vous voulez juste savoir pourquoi cela n'existe pas déjà pour vous plutôt que de demander comment résoudre un problème technique? Il n'y a pas de réponse autre que "les développeurs Java ne l'ont pas fait. Parce qu'ils ne l'ont pas fait." Marchements pour la fermeture.


4 Réponses :


11
votes

null code> n'est pas une représentation valide du nombre d'entiers. INTEGER.PARSINT () CODE> nécessite que la chaîne soit analysée soit une représentation VAILD du nombre d'entiers.

integer.parseint () strong> p> xxx pré>

INTEGER.VALUEOF (STR)] // qui invite INTEGER.PARSINT (STR) pour renvoyer une instance entier. P>

  public static Integer valueOf(String s) throws NumberFormatException
569     {
570         return new Integer(parseInt(s, 10));
571     }


10 commentaires

Je suis en désaccord que j'utilise entier parce que je dois manipuler avec la valeur null. Quand je ne veux pas que j'utilise int


... vous êtes en désaccord avec les spécifications Java?


Je pense que ce que PremgeneRror signifie par integer est l'entité mathématique et non un objet de la classe entier . :)


@Jeff vous avez raison. Ainsi, j'ai dit numéro entier dans ma réponse. Notez également le minuscule I :)


@HUDI INTEGER peut être nul mais vous ne pouvez pas obtenir une représentation globale de NULL. Comment représenteriez-vous une valeur null? Si vous pensez de -1, cette approche serait invalide dans n'importe quel domaine où les valeurs négatives ont du sens. En tout cas, vous pouvez écrire votre propre méthode Paysint. Dans ma demande, nous retournons -1 lorsque nous essayons d'analyser une chaîne nulle, mais c'est une convention que nous avons acceptée (nous, les développeurs de cette application particulière).


@Samdufel je ne dis pas ça. Une méthode qui peut gérer la chaîne nulle sans exception. Il est si difficile de créer si (valeur == null) renvoie NULL Sindre la valeur de retour (valeur)?


La question concerne la valeur et non parseint . Été édité pour ajouter valeur de .


@Jonathandrapeau vérifier mon édition. Integer.Valueof () Infactez l'integer.parseint ()


@PemGenerror Ma question n'était pas à propos de ces deux méthodes. Je sais comment ils travailles. Ma question concerne une troisième méthode qui devrait résoudre des chaînes nulles sans exception


@HUDI Malheureusement, il n'y a pas de telle méthode dans API Afasik. Cependant, comme je l'ai dit dans ma réponse null n'est pas un représentant valide d'une valeur numérique. java.lang.integer si être un objet a été principalement introduit pour utiliser des primitives dans les collections de Java. Ainsi, je pense que permettre à NULL dans l'analyse des entiers n'a aucun sens



3
votes

Je pourrais me tromper, @hudi, mais c'est ce que vous recherchez? XXX


1 commentaires

Oui, j'écris ceci dans des commentaires mais ma question est pourquoi il n'y a pas de méthode de ce type en Integer Class?



9
votes

Les gens au soleil qui ont mis en œuvre entier (A long il y a longtemps :)) ne pensaient probablement pas à des bases de données lorsqu'ils écrivaient cette méthode. Sauf lors de la gestion des données de base de données ou des cas rares où vous essayez de représenter explicitement «inconnu» avec NULL, NULL est généralement un signe de quelque chose qui a été terriblement faux. En général, c'est une bonne idée d'élever une exception dès qu'il y a un problème. (un Fail Fast Design)

Si vous avez déjà passé du temps à la recherche d'une défaillance de segmentation en C en raison d'une valeur de chaîne supérieure à la mémoire que vous avez fournie (qui a ensuite écrasé du code de programme ou d'autres données), vous aurez une très bonne appréciation de Comme c'est mauvais de ne pas échouer quand quelque chose a mal tourné.

Depuis l'heure de Java 1.0, l'interaction avec des bases de données en Java est devenue extrêmement courante afin que vous ayez peut-être raison de suggérer qu'il devrait y avoir une méthode pour gérer cela. Entier est une classe finale, donc si vous construisez votre propre entier comme une classe, vous perdrez de l'autoboxage, cela nécessite donc probablement une modification de la langue par Oracle.

Fondamentalement, ce que vous avez observé est la façon dont il s'agit pour le moment et que quelqu'un devra vous payer pour le coder autour de lui :)


0 commentaires