动态转换:类和字符串可比较

时间:2010-06-28 18:02:18

标签: java dynamic casting dynamic-cast

而不是试图将我的问题写成文字,这里有一些代码可以证明我想要做的事情:

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

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

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

2 个答案:

答案 0 :(得分: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中转换其他类,则必须使用其转换器方法。

但我不知道你是否真的需要这个,以及为什么。既然你知道所有的类和参数。

答案 1 :(得分: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

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