ユーザー入力を解析し、それをクラスの配列と比較して、それに応じて入力をキャストするための汎用コードを書きたいと思います。すなわち:
- Object[] paramTypes = {文字列.クラス、文字列.クラス、整数.クラス}
- Object[ ] userInput = { "playerName1", "targetPlayerName", "5" } //5 は文字列
- ユーザー入力の各文字列は、paramTypes の対応するクラスにキャストされます。
最後に、キャストされた単語は、後で使用するために別の Object[ ] castedUserInput に入れられます。
for(int i = 0; i<userInput.length; i++) castedUserInput[i] = paramTypes[i].cast(userInput[i]);
paramTypes[i] が Integer.class でキャストが実行されるとすぐに、ClassCastException が発生します。その例外のドキュメントは次のとおりです。
ClassCastException: コードがオブジェクトをインスタンスではないサブクラスにキャストしようとしたことを示すためにスローされます
そのため、(Object)"5" (正確に機能しないのはなぜですか?) も "5" も Number のサブクラスにキャストできません。
Number と String はどちらもオブジェクトのサブクラスですが、それ以外は互いに関連していないことがわかりました。NumberとClassCastExceptionのソースコードを確認するために JDK7 をインストールしていますが、プログラミングを始めてまだ1 年ほどで、Java コンパイラと仮想マシンが何であるかを十分に理解していないため、あまり役に立たないでしょう。マシンはまさにここでやっています。
誰か助けてくれませんか?
PS: もちろん、いくつかの if 句を使用してから、Integer.parseInt(userInput[i])、Long.parseLong(userInput[i]) などを使用できますが、それは最も効率的なソリューションではありませんよね?