而不是试图将我的问题写成文字,这里有一些代码可以证明我想要做的事情:
Class cls = Double.class
String str = "31.4";
Comparable comparableObj null;
comparableObj = (Comparable) cls.cast(str);
有什么想法吗?我看过使用反射但没有成功。
答案 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
如果你用文字解释你想要达到的目标,那么它可能会有所帮助,那么你可能会以更好的方式获得更多的帮助。