1

与其试图将我的问题用语言表达出来,不如用一些代码来演示我想要做什么:

Class cls = Double.class
String str = "31.4";
Comparable comparableObj null;

comparableObj = (Comparable) cls.cast(str);

有任何想法吗?我看过使用反射但没有成功。

4

2 回答 2

1

您将不得不调用valueOf这些类中的每一个的方法。所以也许:

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];
    }
}

此代码valueOf通过反射采用该方法。getMethod(..)接受方法名称和参数类型,并invoke(..)作为null第一个参数,因为该方法是静态的。

如果还有其他类要从 String转换,则必须使用它们的转换器方法。

但我不知道你是否真的需要这个,为什么。因为你知道所有的类和论点。

于 2010-06-28T18:11:41.003 回答
1

我真的不喜欢你正在尝试做的事情,但这是我对你的代码的修改,以便它编译和运行:

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]);
}

印刷:

12
31.4
dog

如果你用语言解释你想要达到的目标,它可能会有所帮助,那么你可能会得到更多帮助,以更好的方式实现它。

于 2010-06-28T18:15:50.083 回答