4 votes

Convertir une chaîne de caractères en type générique

Mon programme doit recevoir l'entrée d'un fichier, l'entrée peut être des caractères, des entiers ou des caractères. Avec cela, je dois créer un arbre à partir des éléments donnés dans le fichier. Le type d'entrée est indiqué au début du fichier. Mon problème est que ma fonction insertNode reçoit l'élément comme un type générique T, mais le fichier est lu comme des chaînes de caractères. Comment puis-je convertir la chaîne de caractères en type T ?

J'essaie de compiler avec :

String element = br.readLine();  
T elem = (T)element; 

entraîne une erreur de compilation :

"found : java.lang.String required : T "

18voto

Andrzej Doyle Points 52541

Vous devez avoir un moyen de créer une instance de T sur la base d'un String (ou, de manière équivalente, la conversion d'un String à un T ).

Le cast ne fait pas ce que vous pensez peut-être qu'il fait dans ce cas. Tout ce qu'un cast fait est de dire au système de type, "Je sais que vous avez une idée différente, moins spécifique de la classe de cet objet, mais je vous dis que c'est un Foo . Allez-y, vérifiez sa classe d'exécution et voyez que j'ai raison !". Dans ce cas, cependant, la chaîne n'est pas nécessairement une T c'est pourquoi le casting échoue. Le moulage ne convertit pas, il ne fait que désambiguïser. .

En particulier, si T se trouve être Integer dans ce cas, vous devez convertir la chaîne en un nombre entier en appelant Integer.parseInt(element) . Cependant, la partie du code que vous avez copiée ne sait pas ce que l'on doit faire. T va être lorsqu'il est invoqué, et ne peut pas effectuer ces conversions lui-même. Par conséquent, vous devez passer un objet d'aide paramétré pour effectuer la conversion pour vous, quelque chose comme ce qui suit :

interface Transformer<I, O> {
    O transform(I input);
}

...

public void yourMethod(BufferedReader br, Transformer<String, T> transformer) {

    String element = br.readLine();
    T elem = transformer.transform(element);

    // Do what you want with your new T
}

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X