編集:これ以降解決されています。助けてくれた皆様に感謝します。正しいラッパークラスとしてオブジェクトをキャストした後にメソッドを呼び出す。しかし、String.valueOf()は、同じ効果を達成するためにずっと簡単です。Javaのプリミティブに動的にキャスト
こんにちは -
私がやろうとしていることさえできないかもしれません。私は数時間かけてさまざまなことを研究して実験しました。だから私は最終的に誰かがこれが可能かどうかを知ることができるかどうかを尋ねました。
リフレクションを使用して、未知の型のプリミティブのラッパーをプリミティブとして動的にキャストできますか?
私は基本的に任意のタイプのプリミティブを文字列に変換する汎用のtoString関数を作成しようとしています。このような一見単純なことは、難しいことです(そして、それぞれの型をテストしてWrapper.class型であるかどうかを確認し、具体的にキャストすることができますが、この時点では私はちょうど頑固さを追求しています)。
以下は、ClassCastExceptionをスローします。 primClassクラスが正しいと思われる(primClass.getName()を印刷するときに "int"を与える)。
private String toString(Number obj){
String result = "";
try{
Class objClass = obj.getClass();
Field field = objClass.getDeclaredField("TYPE");
Class primClass = (Class)field.get(obj);
Method method = objClass.getMethod("toString", new Class[]{primClass});
Object args = new Object[]{primClass.cast(obj)};
result = (String)method.invoke(null, args);
}catch(Exception ex){
//Unknown exception. Send to handler.
handleException(ex);
}
return result;
}
私は少し失恋しています。誰にでもアイデアはありますか?どんな助けでも大歓迎です。
'Double、Long、...'の 'toString'メソッドは何もしませんか? – khachik