Cast dynamique: classe et chaîne à Comparable
-
01-10-2019 - |
Question
Au lieu d'essayer d'essayer de mettre mon problème en mots, voici un code qui montre ce que je veux faire:
Class cls = Double.class
String str = "31.4";
Comparable comparableObj null;
comparableObj = (Comparable) cls.cast(str);
Toutes les idées? Je l'ai regardé en utilisant la réflexion, mais sans succès.
La solution
Je ne aime pas vraiment ce que vous essayez de faire, mais voici ma modification de votre code afin qu'il compile et fonctionne:
Class [] domains = { Integer.class, Double.class, String.class };
String [] stringValues = { "12", "31.4", "dog" };
Comparable [] comparableObjects = { null, null, null };
for (int i = 0; i < domains.length; i++) {
Constructor con = domains[i].getConstructor(String.class);
comparableObjects[i] = (Comparable) con.newInstance(stringValues[i]);
System.out.println(comparableObjects[i]);
}
Prints:
12
31.4
dog
Il peut être utile que si vous expliquer avec des mots ce que vous essayez d'atteindre, alors vous pourriez obtenir plus d'aide faire une meilleure façon.
Autres conseils
Vous devrait invoquer la méthode valueOf
de chacune de ces classes. Alors peut-être:
for (int i = 0; i < domains.length; i++) {
try {
comparableObjects[i] = (Comparable) domains[i]
.getMethod("valueOf", String.class).invoke(null, stringValues[i]);
} catch (NoSuchMethodException ex) {
comparableObjects[i] = stringValues[i];
}
}
Ce code prend la méthode valueOf
par réflexion. getMethod(..)
prend le nom de la méthode et le type d'argument (s), et invoke(..)
prend null
comme premier argument, parce que la méthode est statique.
S'il y a d'autres classes que vous voulez convertir de chaîne, vous auriez à utiliser leurs méthodes de conversion.
Mais je ne sais pas si vous avez réellement besoin cela, et pourquoi. Puisque vous connaissez toutes les classes et arguments.