Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2944 connectés 

  FORUM HardWare.fr
  Programmation
  Java

  retrouver le type boxé à partir du type primitif

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

retrouver le type boxé à partir du type primitif

n°868103
nraynaud
lol
Posté le 08-10-2004 à 15:33:40  profilanswer
 

bijour,
 
est-ce que quelqu'un a quelquechose de plus intelligent que ça svp :

Code :
  1. private static Class boxed(Class c) {
  2.         String name = c.getName();
  3.         if (c.getName().equals("int" ))
  4.             return Integer.class;
  5.         if (c.getName().equals("boolean" ))
  6.             return Boolean.class;
  7.         if (c.getName().equals("long" ))
  8.             return Long.class;
  9.         if (c.getName().equals("float" ))
  10.             return Float.class;
  11.         if (c.getName().equals("double" ))
  12.             return Double.class;
  13.         if (c.getName().equals("byte" ))
  14.             return Byte.class;
  15.         if (c.getName().equals("char" ))
  16.             return Character.class;
  17.         if (c.getName().equals("short" ))
  18.             return Short.class;
  19.         assert !c.isPrimitive() : "gloups on en a oublié un";
  20.         return c;
  21.     }


 
merci d'avance.


---------------
trainoo.com, c'est fini
mood
Publicité
Posté le 08-10-2004 à 15:33:40  profilanswer
 

n°868117
nerisson
Pic-pic
Posté le 08-10-2004 à 15:44:09  profilanswer
 

Oui, j'ai une version plus intelligente:

Code :
  1. private static Class boxed(Class c) {
  2.         String name = c.getName();
  3.         if (name.equals("int" ))
  4.             return Integer.class;
  5.         if (name.equals("boolean" ))
  6.             return Boolean.class;
  7.         if (name.equals("long" ))
  8.             return Long.class;
  9.         if (name.equals("float" ))
  10.             return Float.class;
  11.         if (name.equals("double" ))
  12.             return Double.class;
  13.         if (name.equals("byte" ))
  14.             return Byte.class;
  15.         if (name.equals("char" ))
  16.             return Character.class;
  17.         if (name.equals("short" ))
  18.             return Short.class;
  19.         assert !c.isPrimitive() : "gloups on en a oublié un";
  20.         return c;
  21.     }


 :D  
Sinon pour répondre réellement à ta question.. je sais pas  :)

n°868121
nraynaud
lol
Posté le 08-10-2004 à 15:47:15  profilanswer
 

ah oui tiens.


---------------
trainoo.com, c'est fini
n°868138
sircam
I Like Trains
Posté le 08-10-2004 à 15:54:43  profilanswer
 

Heuuuu... tu comptes l'invoquer comment, cette fonction ? Avec un type primitif en paramètre ?

Code :
  1. int i = 0;
  2. boxed(i);


[:alph-one]


Message édité par sircam le 08-10-2004 à 15:55:44

---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°868143
nraynaud
lol
Posté le 08-10-2004 à 15:58:27  profilanswer
 

sircam a écrit :

Heuuuu... tu comptes l'invoquer comment, cette fonction ? Avec un type primitif en paramètre ?

Code :
  1. int i = 0;
  2. boxed(i);


[:alph-one]

héhéhé, je vais te montrer le point d'invocation, tu l'auras cherché ...


---------------
trainoo.com, c'est fini
n°868144
nraynaud
lol
Posté le 08-10-2004 à 15:59:59  profilanswer
 

Code :
  1. public void readPreferences(Preferences prefs) {
  2.         this.preferences = prefs;
  3.         Field[] fields = getClass().getDeclaredFields();
  4.         for (int i = 0; i < fields.length; i++) {
  5.             Field field = fields[i];
  6.             if (isPreferenceField(field)) {
  7.                 String valString = null;
  8.                 Object val = null;
  9.                 Method m = null;
  10.                 try {
  11.                     valString = prefs.get(field.getName(), String.valueOf(field
  12.                             .get(this)));
  13.                     try {
  14.                         m = boxed(field.getType()).getMethod("valueOf",
  15.                                 new Class[] { String.class});
  16.                         assert Modifier.isStatic(m.getModifiers());
  17.                         val = m.invoke(null, new Object[] { valString});
  18.                     } catch (NoSuchMethodException e) {
  19.                         val = valString;
  20.                     }
  21.                     field.set(this, val);
  22.                 } catch (IllegalArgumentException e) {
  23.                     throw new RuntimeException(e);
  24.                 } catch (IllegalAccessException e) {
  25.                     throw new RuntimeException(e);
  26.                 } catch (InvocationTargetException e) {
  27.                     throw new RuntimeException(e);
  28.                 }
  29.             }
  30.         }
  31.         Preferences tribPrefs = prefs.node("tribunes" );
  32.         String[] tribNames;
  33.         try {
  34.             tribNames = tribPrefs.childrenNames();
  35.         } catch (BackingStoreException e) {
  36.             // TODO Auto-generated catch block
  37.             throw new RuntimeException(e);
  38.         }
  39.         for (int i = 0; i < tribNames.length; i++) {
  40.             tribunes.add(new Tribune(tribPrefs.node(tribNames[i]), this));
  41.         }
  42.         tribPrefs.addNodeChangeListener(new NodeChangeListener() {
  43.             public void childAdded(NodeChangeEvent evt) {
  44.                 String name = evt.getChild().name();
  45.                 // if already here, don't add.
  46.                 for (Iterator i = tribunes.iterator(); i.hasNext();) {
  47.                     Tribune trib = (Tribune) i.next();
  48.                     if (trib.getName().equals(name))
  49.                         return;
  50.                 }
  51.                 Tribune t = new Tribune(evt.getChild(), JCoinCoin.this);
  52.                 addTribune(t);
  53.             }
  54.             public void childRemoved(NodeChangeEvent evt) {
  55.                 //              TODO : tribune removal
  56.             }
  57.         });
  58.         prefs.addPreferenceChangeListener(new PreferenceChangeListener() {
  59.             public void preferenceChange(PreferenceChangeEvent evt) {
  60.                 //TODO : implement this
  61.             }
  62.         });
  63.     }


---------------
trainoo.com, c'est fini
n°868160
sircam
I Like Trains
Posté le 08-10-2004 à 16:09:53  profilanswer
 

Espèce de petit vicieux
 [:crusty128]  
C'est du propre.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°868168
nraynaud
lol
Posté le 08-10-2004 à 16:15:37  profilanswer
 

quoi ? sauver un graphe d'objet dans les préférences, ça n'a rien de vicieux comme idée.


---------------
trainoo.com, c'est fini
n°868169
smaragdus
whores, drugs & J.S. Bach
Posté le 08-10-2004 à 16:16:01  profilanswer
 

nraynaud a écrit :

bijour,
 
est-ce que quelqu'un a quelquechose de plus intelligent que ça svp :
[...]
merci d'avance.


 
"Et alors, l'informaticien inventa le tableau. Et il vit que cela était bon..."

n°868171
phnatomass
Je m'empare de ton esprit !!
Posté le 08-10-2004 à 16:16:18  profilanswer
 

L'introspection et les modeles objets c'est sympa mais de la programmation à l'ancienne c'est aussi très efficace en rapidité.
 

Code :
  1. public static Class getBox(int i)
  2.    {
  3.      return Integer.class;
  4.    }
  5.  
  6.    public static Class getBox(char c)
  7.    {
  8.      return Character.class;
  9.    }
  10.  
  11.    public static  Class getBox(byte b)
  12.    {
  13.      return Byte.class;
  14.    }
  15.  
  16.    public static Class getBox(long l)
  17.    {
  18.      return Long.class;
  19.    }
  20. etc..

mood
Publicité
Posté le 08-10-2004 à 16:16:18  profilanswer
 

n°868185
phnatomass
Je m'empare de ton esprit !!
Posté le 08-10-2004 à 16:19:36  profilanswer
 

En cas d'ajout de nouveaux type dans un jdk ultérieur ben on ajoute d'autres méthodes et en plus il n' y a pas de super type pour les types primitifs comme c'est le cas pour les classes avec la classe Object.

n°868192
nraynaud
lol
Posté le 08-10-2004 à 16:21:36  profilanswer
 

phnatomass a écrit :

L'introspection et les modeles objets c'est sympa mais de la programmation à l'ancienne c'est aussi très efficace en rapidité.
 

toi tu as été voir le point d'utilisation, ça fait peur.


---------------
trainoo.com, c'est fini
n°868207
phnatomass
Je m'empare de ton esprit !!
Posté le 08-10-2004 à 16:30:19  profilanswer
 

nraynaud a écrit :

toi tu as été voir le point d'utilisation, ça fait peur.

:heink:  Je ne comprends pas !!  
Sinon la version que j'ai proposé est plus objet que celle de ton premier message.
Par contre ton truc avec les Preferences.. :??:  

n°868214
nraynaud
lol
Posté le 08-10-2004 à 16:32:58  profilanswer
 

phnatomass a écrit :


Sinon la version que j'ai proposé est plus objet que celle de ton premier message.

Elle a surtout aucun rapport avec la choucroute. C'est bien de prétendre "être plus objet" (en se fondant sur la surchage ... hum) mais ça serait bien de d'abord répondre au besoin.


---------------
trainoo.com, c'est fini
n°868235
phnatomass
Je m'empare de ton esprit !!
Posté le 08-10-2004 à 16:48:45  profilanswer
 

Ecoute on va s'arreter là. Je n'ai nullement l'intention de me bagarer avec toi.
Le titre de ton message c'était "retrouver le type boxé à partir du type primitif".
J'ai juste fournit une réponse que j'estime plus judicieuse. Maintenant je n'avait pas regarder le détail du code avec les Preferences, ton "point d'utilisation" et effectivement ça ne correspond pas au besoin.


Message édité par phnatomass le 08-10-2004 à 16:49:17
n°868240
nraynaud
lol
Posté le 08-10-2004 à 16:51:00  profilanswer
 

phnatomass a écrit :

"retrouver le type boxé à partir du type primitif".

bah oui, ça parlait de type pas de valeur.


---------------
trainoo.com, c'est fini
n°868259
phnatomass
Je m'empare de ton esprit !!
Posté le 08-10-2004 à 16:58:56  profilanswer
 

C'est vrai qu'on a tendance à oublier que l'on peut avoir un objet de type Class même pour les types primitifs (qui eux ne sont justement pas des Objets).

n°868263
nraynaud
lol
Posté le 08-10-2004 à 17:01:41  profilanswer
 

phna > je l'ai appris en me faisant avoir une fois lors d'une introspection d'ailleur, je pensais que ça renvoyait le type boxé (puisque toutes les opérations reflexives sont boxées).


---------------
trainoo.com, c'est fini
n°868638
julienv
Posté le 08-10-2004 à 22:45:38  profilanswer
 

moi j'ai ca
 

Code :
  1. public static Class boxed(Class c)
  2. {
  3.    try
  4.    {
  5.       Field f = c.getField("TYPE" );
  6.       if (f.getType().getName().startsWith("java.lang." ))
  7.       {
  8.          return (Class)f.get(null);
  9.       }
  10.    }
  11.    catch(Exception ignore) {}
  12.    throw new IllegalArgumentException("bouh" );
  13. }

n°868718
the real m​oins moins
Posté le 08-10-2004 à 23:34:28  profilanswer
 

moi j'ai une jdk1.5 [:dawa]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°868720
nraynaud
lol
Posté le 08-10-2004 à 23:35:43  profilanswer
 

julienv > ça m'intéresse (la démarche), mais tu te fondes sur quelle spec pour faire ça ?
 
j'ai l'impression que tu te trompes de sens non ?
 
si je lui passe une classe nommé "short", il va bien de renvoyer Short.class ?
 
 
je tente une inspection de  

Code :
  1. Short.TYPE.getField("TYPE" )


et j'ai :

java.lang.NoSuchFieldException: TYPE
 at java.lang.Class.getField(Class.java:919)


---------------
trainoo.com, c'est fini
n°868722
the real m​oins moins
Posté le 08-10-2004 à 23:36:41  profilanswer
 

c'est possiblement sun only :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°868727
nraynaud
lol
Posté le 08-10-2004 à 23:38:09  profilanswer
 

t'es un pote à phnatomass ?
 
tu crois que le JDK 1.5 boxe les Class ?


---------------
trainoo.com, c'est fini
n°868730
nraynaud
lol
Posté le 08-10-2004 à 23:39:00  profilanswer
 

the real moins moins a écrit :

c'est possiblement sun only :/

je suis sur une hotspot hein.


---------------
trainoo.com, c'est fini
n°868734
julienv
Posté le 08-10-2004 à 23:39:57  profilanswer
 

ah ouais t'as raison, j avais pas fait attention
 

nraynaud a écrit :

julienv > ça m'intéresse (la démarche), mais tu te fondes sur quelle spec pour faire ça ?
 
j'ai l'impression que tu te trompes de sens non ?
 
si je lui passe une classe nommé "short", il va bien de renvoyer Short.class ?
 
 
je tente une inspection de  

Code :
  1. Short.TYPE.getField("TYPE" )


et j'ai :

java.lang.NoSuchFieldException: TYPE
 at java.lang.Class.getField(Class.java:919)



n°871200
pascal34
one point !
Posté le 12-10-2004 à 11:08:53  profilanswer
 

Et Sun inclua l'autoboxing dans son jdk 1.5, et l'informaticien vit que c'était bien...

n°871203
the real m​oins moins
Posté le 12-10-2004 à 11:10:37  profilanswer
 

et le gros con ferma sa gueule quand il vit que c'était pas encore dispo sous mac :fou:
 
 
 
 
:whistle:
 
(tiens j'avais oublié "con" dans mon post [:pepe le putois])


Message édité par the real moins moins le 12-10-2004 à 11:38:44

---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°871218
nraynaud
lol
Posté le 12-10-2004 à 11:22:02  profilanswer
 

MAIS BORDEL DE MANCHE À COUILLES, JE CHERCHE PAS À FAIRE DE L'AUTOBOXING, SINON J'AURAIS PAS ENVOYÉ CHIER PHNATOMASS.


---------------
trainoo.com, c'est fini
n°871435
gfive
Posté le 12-10-2004 à 14:37:19  profilanswer
 

j'ai un truc, je crois :  
 

Code :
  1. private static Class boxed(Field f, Object o) throws IllegalArgumentException, IllegalAccessException {
  2. return f.get(o).getClass();
  3. }
  4. private int intN;
  5. private boolean bool;
  6. private long longN;
  7. private float floatN;
  8. private double doubleN;
  9. private byte byteB;
  10. private char character;
  11. private short shortN;
  12. public Test() {
  13. }
  14. public static void main(String[] args) {
  15. try {
  16.  Test test = new Test();
  17.  Field[] f = Test.class.getDeclaredFields();
  18.  for (int i = 0; i < f.length; i++) {
  19.   System.out.println("Field  "+f[i].getName()+" ["+f[i].getType()+"] : class = "+boxed(f[i], test).getName());
  20.  }
  21. } catch (Exception e) {
  22.  e.printStackTrace();
  23. }
  24. }


 
me ressort :  
 

Citation :


Field intN [int] : class = java.lang.Integer
Field bool [boolean] : class = java.lang.Boolean
Field longN [long] : class = java.lang.Long
Field floatN [float] : class = java.lang.Float
Field doubleN [double] : class = java.lang.Double
Field byteB [byte] : class = java.lang.Byte
Field character [char] : class = java.lang.Character
Field shortN [short] : class = java.lang.Short
Field class$0 [class java.lang.Class] : class = java.lang.Class


 
Bon, ça oblige à avoir une instance de la classe, par contre, mais ça semble fonctionner.

n°871496
nraynaud
lol
Posté le 12-10-2004 à 14:55:44  profilanswer
 

gfive > hum, y'a de l'idée ... sachant que this n'est jamais null ...
 
merci.


---------------
trainoo.com, c'est fini
n°871585
pascal34
one point !
Posté le 12-10-2004 à 15:51:16  profilanswer
 

the real moins moins a écrit :

et le gros con ferma sa gueule quand il vit que c'était pas encore dispo sous mac :fou:
 
 
 
 
:whistle:
 
(tiens j'avais oublié "con" dans mon post [:pepe le putois])


 
Et le gros con qui me traita de gros con alla se faire f.....e avec son mac à la con.
Pas ma faute si c'est pas encore dispo sous mac.
 
PS : Y'en a assez là des "con" ?

n°871588
the real m​oins moins
Posté le 12-10-2004 à 15:52:30  profilanswer
 

t'as oublié "foutre" [:itm]
 
 
et c'est pas ma faute non plus [:sisicaivrai]
 
 
et t'façons nraynaud il voulait pas faire du boxing[:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°871607
pascal34
one point !
Posté le 12-10-2004 à 15:59:32  profilanswer
 

the real moins moins a écrit :

t'as oublié "foutre" [:itm]


 
Bien, 1 point pour les lèches.
 
S'il veut pas d'autoboxing, on se prend le choux pkoi ?
 
PS : "BORDEL DE MANCHE À COUILLES" est une expressions fortement sympathique qui m'était inconnue jusqu'alors. Elle eu été de bon aloi dans  "les visiteurs".

n°871656
the real m​oins moins
Posté le 12-10-2004 à 16:27:32  profilanswer
 

pascal34 a écrit :


S'il veut pas d'autoboxing, on se prend le choux pkoi ?

ça fait un moment que j'ai arreté d'essayer de comprendre ce qu'il veut, mais je suis sur qu'xstream resoudrait son problème [:itm]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°871660
nraynaud
lol
Posté le 12-10-2004 à 16:30:25  profilanswer
 

the real moins moins a écrit :

ça fait un moment que j'ai arreté d'essayer de comprendre ce qu'il veut, mais je suis sur qu'xstream resoudrait son problème [:itm]

harcèlement, ton compte est bon mon bonhomme ...


---------------
trainoo.com, c'est fini
n°871711
sircam
I Like Trains
Posté le 12-10-2004 à 17:34:27  profilanswer
 

Real--, Nicolas : vous êtes vraiment insortables.


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°871746
nraynaud
lol
Posté le 12-10-2004 à 18:29:43  profilanswer
 

sircam > et encore tu nous a pas vus dans la vraie vie, à tenter de monter à 5 dans un taxi [:petrus75] (c'est -- qui fait les 4 autres)


---------------
trainoo.com, c'est fini
n°871748
sircam
I Like Trains
Posté le 12-10-2004 à 18:32:51  profilanswer
 

Vous faites parfois vieux couple, tu sais ;)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
n°871763
the real m​oins moins
Posté le 12-10-2004 à 18:59:35  profilanswer
 

j'ai plus darklord, fallait bien que je me trouve qqun d'autre [:spamafote]


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
n°872167
pascal34
one point !
Posté le 13-10-2004 à 10:13:55  profilanswer
 

the real moins moins a écrit :

j'ai plus darklord, fallait bien que je me trouve qqun d'autre [:spamafote]


 
faut bien se recycler

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  Java

  retrouver le type boxé à partir du type primitif

 

Sujets relatifs
Sortir d'un exécutable crée par delphi a partir d'un touche de clavierRetrouver la date d'il y'a X jours
PDF à partir d'une page PHPutiliser un type définit en c dans vb
utiliser un type définit en c dans vb via une dllRetrouver l'IRQ a partir de l'IRQL ? XP
[D8] Recup les params(nom/type) d'1 proc stockée Oracle [RESOLU]random à partir d'un nombre
Lancer un executable en local à partir d'une page htm 
Plus de sujets relatifs à : retrouver le type boxé à partir du type primitif


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR