与其试图将我的问题用语言表达出来,不如用一些代码来演示我想要做什么:
Class cls = Double.class
String str = "31.4";
Comparable comparableObj null;
comparableObj = (Comparable) cls.cast(str);
有任何想法吗?我看过使用反射但没有成功。
与其试图将我的问题用语言表达出来,不如用一些代码来演示我想要做什么:
Class cls = Double.class
String str = "31.4";
Comparable comparableObj null;
comparableObj = (Comparable) cls.cast(str);
有任何想法吗?我看过使用反射但没有成功。
您将不得不调用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转换,则必须使用它们的转换器方法。
但我不知道你是否真的需要这个,为什么。因为你知道所有的类和论点。
我真的不喜欢你正在尝试做的事情,但这是我对你的代码的修改,以便它编译和运行:
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
如果你用语言解释你想要达到的目标,它可能会有所帮助,那么你可能会得到更多帮助,以更好的方式实现它。