簡體   English   中英

嘗試使用charAt()在Java中向下轉換對象后,沒有得到第一個字符;

[英]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

當然,您可以通過使用將objString

(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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM