多くの質問を読んだ後、ハードコードされたアプローチを使用せずに、文字列を一般的な数値に変換するというジレンマを解決できるかどうかを自問しました。
例: メソッドから Class With Number.isAssignableFrom 型のパラメーターを取得するか、これが数値クラスであるかどうかを確認できるその他の方法を取得します。しかし、ユーザーからの入力も得ます。文字列として。
問題は、すべてのケースに対して if ステートメントを作成せずに、この文字列を要求された数値オブジェクトに変換できるかどうかです。
コード例、正しく動作しない:
Object ret = null;
for(int i=0;i<method.getParameterTypes().length; i++ ) {
Class<?> param = method.getParameterTypes()[i];
String argString = getUserInput(_in, "Argument ("+param.getSimpleName()+"): ");
if( Number.isAssignableFrom(param) )
ret = ((Class<NumberChild>)param).valueOf(argString);
/// OR
ret = param.cast( Double.valueOf(argString) )
}
さらにこの質問を進めます: 上記の方法と同様の方法ですべてのプリミティブをキャストすることは可能でしょうか?
注: ここでのアプローチは、ハードコーディングされていないソリューションに完全に焦点を当てる必要があります。現在実行中のコードは、すべてのケースをハードコーディングするアプローチを使用しています。しかし、そのような場合は、より一般的な解決策の方がはるかに興味深いものになります。
編集: 誤解して申し訳ありませんが、ハードコードされたアプローチ、つまり次のようなすべての可能なケースをテストするアプローチを意味します。
if( integer ); do ...
if( double ); do ...
if( long ); do ...
しかし、それはまさに、私が回避したいことです。明確にするために:これは単なる挑戦です。私の人生やコードはそれに依存していません。それが可能かどうか知りたいだけです!!