
Envoyé par
bouye
Depuis que je fais du Java j'ai toujours utilise les classes et valeur objets pour faire de la reflection sur des methodes prenant des valeurs literrales. De plus je te rappelle egalement que quand tu veux invoquer la methode (Method.invoke()) , le passage des parametres necessitent de toute facon d'avoir des Object (idem pour la valeur de retour de la methode) => donc utiliser Long.class et convertir tes long en Long (resp sur les autres types litteraux).
J'ai effectivement des objects Long. Mais je veux invoquer la méthode d'une bibliothèque qui attend en argument le type primitif long.
Je te vois dire qu'il faut utiliser l'auto unboxing de Java5 pour faire passer le Long en long.
Mais mon problème c'est que j'ai une map (mapTypes) qui prend en clé des nom de champs et en valeurs les types (classes d'emballages) de ces champs. J'ai aussi une mapValeur de même taille que mapTypes avec les mêmes noms de champ et qui contient des objets (instances de classes d'emballages) compatibles avec les types de mapTypes. Et de l'autre côté la classe X de la bibliothèque de BerkeleyDB qui me propose selon le type à manipuler des methodes comme
X.writeInt(int), X.writeLong(long), X.writeByte(byte), X.writeBoolean(boolean) etc.
Je veux pas faire de
1 2 3
| if(mapTypes.get(key)==Integer.class)
int value = mapValue.get(key);
X.writeInt(int); //etc |
J'aimerais itérer sur mapTypes, recuperer le type, identifier dans la X de bibliotheque BerkeleyDB la methode correspondante parmi les X.write... grace à
Method m = X.class.getMethod("write"+valeurType,type_primitif_correspondant)
et ce n'est ensuite que je peux invoquer cette methode m:
m.invoke(instance_de_X,valeur_compatible_argument_de_m)
Je pêche que la recherche de la signature de la methode dans la classe X. Ma question est alors de savoir si je peux avoir le type primitif correspondant à la classe d'emballage donnée dans ce code
Method m = X.class.getMethod("write"+valeurType,type_primitif_correspondant)
Voilà.
Partager