我想編寫通用代碼來解析用戶輸入並將其與類數組進行比較,然後相應地投射輸入。即:從BufferedReader(InputReader)輸入解析Integer.class
- 對象[] paramTypes = {String.class,String.class,Integer.class}
- 對象[] 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異常:拋出,表明代碼已經試圖對象轉換子類,它是不是一個實例
所以,既不(對象)「5」 (爲什麼這不起作用?)也不能將「5」轉換爲Number的子類。
現在我明白,數字和字符串都是對象的子類,但除此之外彼此不相關。我正在安裝JDK7來查看的源代碼和ClassCastException,但我懷疑這對於我只編程了大約一年並且缺乏對什麼java編譯器和虛擬機正在這裏做着。
任何人都可以幫助我嗎? PS:當然可以使用幾個if子句,然後使用Integer.parseInt(userInput [i]),Long.parseLong(userInput [i])等,但這不可能是最有效的解決方案,對?
沒有調用解析功能,是如何知道如何改變一個任意字符串爲整數計算機?從編譯器的角度來看,它無法區分「4」和「一些隨機字符串」。 (雖然顯然你不能將後者轉換爲int) – 2013-04-28 21:32:02
將對象轉換爲另一種類型決不會改變對象的類型。它所做的只是允許你引用另一個類型的對象,當且僅當它真的具有這種類型。一個字符串是一個字符串,一個CharSequence,一個Serializable,一個COmprable和一個對象,但它不是一個整數。 – 2013-04-28 21:34:55