comment je peux faire un cast automatique sans pour autant spécifier le type de la variable en dure . à mon sens je devrais utilisé la réflexion !!!!
comment je peux faire un cast automatique sans pour autant spécifier le type de la variable en dure . à mon sens je devrais utilisé la réflexion !!!!
Probablement, oui, mais...
- Comment un cast peut-il être autre chose qu'automatique ?
Tu as l'intention de lire le programme à haute voix et faire prendre des notes à une armée de scribes pour consigner l'état de la mémoire et les changements qui y sont faits ? (Auquel cas, effectivement, ce n'est pas automatique.)
- À quoi ça te sert de faire un cast si tu ne connais pas le type à l'avance ?
(Si si, ça peut bel et bien servir dans certaines circonstances... Mais je me demandais si toi, tu en connaissais.)
D’abord je vous remercie d’avoir répondu à mon problème .
En faite j’ai le moyen de connaitre le type de la variable sans pour autant l’écrire en dure : c’est via une requête , vue que j’ai une table qui centralise les types de mes variables qui sont toutes stockées sous format String .
Ce que je veux réalisé est le suivant :
1- récupérer la variable qui est stockée sous format string , et qui peut être un Integer par exemple .
2- invoquer la requête que je vous ai cité au-dessus pour connaitre le type de la variable dans ce cas elle va me retourner Integer.
3- enfin je dois faire un cast sans écrire Integer en dure .
À mon niveau je pense que la réflexion de java peut faire la faire ! vraiment si vous pouvez me communiquer des idées ou des pistes je te serais reconnaissant . Encore merci de tout cœur pour l’intérêt que vous avez porté à mon problème.
Salut,
Avec la reflection je dirais Class.cast()...
Mais ca dépend surtout de l'usage que tu vas en faire, et sans plus de détail sur le contexte difficile de t'aider...
a++
Tu te rends compte que le cast, ça sert à préciser à java que la variable, stocké dans le champ x de type A, peux être stocké dans le champs y de type B
Sans écrire B en dure dans le code, tu m'explique comment tu es arrivé à créer le champs / la variable y ??
J'ai l'impression que tu imagine que le cast peux transformer une String en Integer. Ce n'est pas le cast. Le cast ne fait que demander à la jvm si, quelque chose que tu as supposé à la compilation (exemple que ton Object est un Integer) est toujours vrai à l'exécution (donc que ton object ne contient pas en réalité un String ou un Byte).
Oui donc tu veux faire une conversion de String vers int. Rien à voir avec un cast.
Eh bien ce n'est pas le cas.
Il va falloir que tu crées un "convertisseur" pour chaque genre de conversion "string vers quelque chose" que tu veux faire.
Rien ne t'empêche ensuite de faire en sorte que chacun de ces convertisseurs implémentent la même interface, et de garder une instance de chaque dans une Map<String, Convertisseur> indexée par le nom du type à convertir comme tu le récupères de ta database.
2 remarques :
1 - ce que tu veux faire, ce n'est pas un cast. C'est transformer un String en Integer (ou autre chose). Pour cela, il faut faire une (ou plusieurs) fonction qui prendra en parametre le String et renverra l'instance correspondante du type voulu.
2 - Tu veux un Integer sans ecrire Integer en dur. Un cast n'a d'interet que si c'est pour utiliser l'instance en question. Or, pour l'utiliser, tu as bien besoin d'ecrire son type. Bref, il faudrait preciser comment tu l'utilises parce que la, c'est pas clair du tout (et, j'ai l'impression, meme dans ta tete).
d'abord merci tout le monde pour de de m'avoir accordé du temps je suis vraiment reconnaissant .
je reconnais avoir tord vue que j'ai mélangé entre casting et conversion.
concernant votre proposition Thelvin , j'ai trouvé que c'est une excellente suggestion c'est pour cette raison que je l'ai testée mais apparemment je suis tombé dans le même problème qu casting : voilà le code source
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 public class Test2 { private static Map<String, Convertisseur> mapConvertisseur; public static void main(String[] agrs){ intMapConvertisseur(); String vleur = "33"; String typeValeur="Intger"; // ici il me souligne cette instruction en rouge pour me dire que je dois fair / un cast , donc je suis tombé dans le même problème vous voyez ! Integer valeurInteger = mapConvertisseur.get(typeValeur).getValue(vleur); } private static void intMapConvertisseur(){ mapConvertisseur = new HashMap<String, Convertisseur>(); mapConvertisseur.put("Integer", new ConvertisseurStringIToInteger()); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5 interface Convertisseur { public Object getValue(String value ); }Merci d'avance.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 class ConvertisseurStringIToInteger implements Convertisseur { @Override public Object getValue(String value) { Integer integerValue = Integer.parseInt(value); return integerValue; } }
Ben oui tu dois faire un cast. valeurInteger est défini comme un Integer, donc tu dois caster.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 // ici il me souligne cette instruction en rouge pour me dire que je dois fair / un cast , donc je suis tombé dans le même problème vous voyez ! Integer valeurInteger = mapConvertisseur.get(typeValeur).getValue(vleur);
Quel est le problème à cela ?
a++
Partager