私の問題を言葉で表現しようとする代わりに、私がやりたいことを示すコードを次に示します。
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
あなたが達成しようとしていることを言葉で説明すれば、それは助けになるかもしれません、そしてあなたはそれをより良い方法で行うためのより多くの助けを得るかもしれません。