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.

Était-ce utile?

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.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top