retrouver le type boxé à partir du type primitif

retrouver le type boxé à partir du type primitif - Java - Programmation

Marsh Posté le 08-10-2004 à 15:33:40    

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
Reply

Marsh Posté le 08-10-2004 à 15:33:40   

Reply

Marsh Posté le 08-10-2004 à 15:44:09    

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  :)

Reply

Marsh Posté le 08-10-2004 à 15:47:15    

ah oui tiens.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-10-2004 à 15:54:43    

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}
Reply

Marsh Posté le 08-10-2004 à 15:58:27    

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
Reply

Marsh Posté le 08-10-2004 à 15:59:59    

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
Reply

Marsh Posté le 08-10-2004 à 16:09:53    

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


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 08-10-2004 à 16:15:37    

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
Reply

Marsh Posté le 08-10-2004 à 16:16:01    

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..."

Reply

Marsh Posté le 08-10-2004 à 16:16:18    

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..

Reply

Marsh Posté le 08-10-2004 à 16:16:18   

Reply

Marsh Posté le 08-10-2004 à 16:19:36    

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.

Reply

Marsh Posté le 08-10-2004 à 16:21:36    

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
Reply

Marsh Posté le 08-10-2004 à 16:30:19    

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.. :??:  

Reply

Marsh Posté le 08-10-2004 à 16:32:58    

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
Reply

Marsh Posté le 08-10-2004 à 16:48:45    

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
Reply

Marsh Posté le 08-10-2004 à 16:51:00    

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
Reply

Marsh Posté le 08-10-2004 à 16:58:56    

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).

Reply

Marsh Posté le 08-10-2004 à 17:01:41    

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
Reply

Marsh Posté le 08-10-2004 à 22:45:38    

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. }

Reply

Marsh Posté le 08-10-2004 à 23:34:28    

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-10-2004 à 23:35:43    

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
Reply

Marsh Posté le 08-10-2004 à 23:36:41    

c'est possiblement sun only :/


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 08-10-2004 à 23:38:09    

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


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-10-2004 à 23:39:00    

the real moins moins a écrit :

c'est possiblement sun only :/

je suis sur une hotspot hein.


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 08-10-2004 à 23:39:57    

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)



Reply

Marsh Posté le 12-10-2004 à 11:08:53    

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

Reply

Marsh Posté le 12-10-2004 à 11:10:37    

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 ?
Reply

Marsh Posté le 12-10-2004 à 11:22:02    

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


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-10-2004 à 14:37:19    

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.

Reply

Marsh Posté le 12-10-2004 à 14:55:44    

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


---------------
trainoo.com, c'est fini
Reply

Marsh Posté le 12-10-2004 à 15:51:16    

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" ?

Reply

Marsh Posté le 12-10-2004 à 15:52:30    

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 ?
Reply

Marsh Posté le 12-10-2004 à 15:59:32    

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".

Reply

Marsh Posté le 12-10-2004 à 16:27:32    

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 ?
Reply

Marsh Posté le 12-10-2004 à 16:30:25    

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
Reply

Marsh Posté le 12-10-2004 à 17:34:27    

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


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 12-10-2004 à 18:29:43    

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
Reply

Marsh Posté le 12-10-2004 à 18:32:51    

Vous faites parfois vieux couple, tu sais ;)


---------------
Now Playing: {SYNTAX ERROR AT LINE 1210}
Reply

Marsh Posté le 12-10-2004 à 18:59:35    

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


---------------
Hey toi, tu veux acheter des minifigurines Lego, non ?
Reply

Marsh Posté le 13-10-2004 à 10:13:55    

the real moins moins a écrit :

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


 
faut bien se recycler

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed