[英]Not getting first character after an attempt to downcast an object in java using charAt();
嘗試向下轉換對象后,我試圖從對象中獲取第一個字符,但是我的代碼似乎丟失了一些我不知道出什么問題的東西。
String name = "Mike";
如果我嘗試使用charAt()方法,則可以使用上面的代碼正常工作。
name.charAt(0);
給我們“ M”。 對?
我試圖貶低(不確定是否是正確的術語)對象說:
Object obj = (String) name;
obj ==> "Mike"; // is what we get
但是,如果我使用該方法:
obj.charAt(0);
我期望的結果是“ M”,但它給了我一個錯誤。 我想念什么嗎?
obj是一個Object
而不是String
因此它沒有charAt()
方法。 如果您已經知道對象是字符串類型,則可以將其obj.toString().charAt(0)
為((String) obj).charAt(0)
或使用: obj.toString().charAt(0)
您的問題是,通過將String name
分配給Object obj
您將隱藏obj
引用的是String
。
當然,您可以通過使用將obj
為String
(String)obj
因為基礎引用是對String
類型對象的引用。
您必須考慮到obj
是一個Object
它可能是您的語言支持的任何類型(它是Java嗎?),所以這就是為什么在執行obj.chatAt(0)
時出錯。
如果基礎引用是例如Integer,您期望它返回什么?
這就是為什么要使用charAt()
必須將其charAt()
轉換回String
String str = (String)obj;
char ch = str.charAt(0);
或更簡單:
char ch = ((String)obj).charAt(0);
請記住,如果obj
的引用在此期間更改為某些Integer,則您將無法成功進行鑄造,可能會引發另一個錯誤/異常。
PS示例代碼假設您的語言使用char
作為類型,該字符應包含單個字符。
好吧, 轉換意味着獲取一種特定類型的對象並將其轉換為另一種對象類型。
向下轉換意味着獲取對象並將其轉換為更特定類型的對象。 例如:
Object obj = "This is an object";
String s = (String)obj;
現在,您可以在String s
對象上調用 String類中的方法。 但事實並非相反。 因此,您不能直接在Class Object實例上調用String Class中存在的方法。
要在上面的示例中直接在Object obj
上使用方法charAt(int index)
,您需要先向下轉換,然后才能繼續:
((String)obj).charAt(0); // it will give "T";
此外,如果我這樣做:
obj.charAt(0);
當我嘗試編譯它時,它給了我這個錯誤:
The method charAt(int) is undefined for the type Object
這基本上意味着該方法在Object
類中不存在。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.