J'essaie d'écrire une méthode générale pour analyser les objets des chaînes. Pour être clair, j'ai la mise en œuvre non so-élégante suivante: existe-t-il un meilleur moyen de mettre en œuvre cela? P> p>
6 Réponses :
Je ne suis pas sûr de ce que vous essayez de faire. Voici quelques suppositions différentes: P>
Vous devriez examiner la sérialisation. J'utilise Xstream , mais WriteObject et java.beans.xmlencoder fonctionne également. P>
généralement, cela signifie un problème avec la spécification de l'utilisateur. Qu'avez-vous de l'utilisateur et pourquoi pourriez-vous être autant de types différents? P>
En général, vous voudrez que le type soit aussi large que possible: utilisez double code> s'il s'agit d'un numéro et
chaîne code> pour presque tout le reste. Puis construisez d'autres choses à partir de cette variable. Mais ne passez pas dans le type: Habituellement, le type doit être très évident. P>
+1 - Je soupçonne que l'OP essaie de résoudre le mauvais problème.
Numberutils.Createnumber ( str) code>
(de Apache Commons-Lang) P>
Il décide du type de numéro à créer, de sorte que vous ne passez pas la classe. p>
Que diriez-vous d'énums?
Dunno; +1 pour le jeton de type. Il pourrait également être intéressant de retourner numéro code> et de spécifier un type wildcard limité,
classe étend le numéro> code>.
Si ce sont vos seuls types d'exemples, vous pouvez également faire quelque chose comme: Plus d'informations peut fournir de meilleures réponses. Je serais très surpris s'il n'y a pas déjà un code d'utilité qui réponde à vos spécifications. Il existe quelques façons de résoudre ce problème en fonction des exigences réelles. P> P>
Pour convertir d'un objet (ici une chaîne) à une autre, vous pouvez utiliser transorphe :
Transmorph transmorph = new Transmorph(new DefaultConverters()); float myFloat = transmorph.convert("55.2",Float.TYPE); long[] longsArray = transmorph.convert(new Integer[] { 1, 2, 3, 4 }, long[].class);
Votre méthode peut avoir une seule ligne de code: essai avec différentes classes: p> la sortie: p > Obj: 123; type: Integer
Obj: str; type: String
Obj: 123; type: BigDecimal
Obj: java.text.SimpleDateFormat@38d640; type: SimpleDateFormat
+1 allait suggérer à peu près la même chose. Ils ont tous un constructeur en train de prendre une corde.
Veuillez ajouter le contexte dans lequel vous souhaitez utiliser la méthode. Cela aiderait à donner une solution appropriée.