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
}