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 に答える