找回密碼 或 安全提問
 註冊
|註冊|登錄

伊莉討論區

搜索
儲值後自動升級用戶組認識好友、聊天,分享生活趣事安全提問(回答) 和 永久尊貴會員 事宜
催眠ge 無碼vrntr3dgd自慰
限界!?基因atri限界!?魔法少女林智妍azucat

休閒聊天興趣交流學術文化旅遊交流飲食交流家庭事務PC GAMETV GAME
熱門線上其他線上感情感性寵物交流家族門派動漫交流貼圖分享BL/GL
音樂世界影視娛樂女性頻道潮流資訊BT下載區GB下載區下載分享短片
電腦資訊數碼產品手機交流交易廣場網站事務長篇小說體育運動時事經濟
上班一族博彩娛樂

TVアニメ『一拳超人

[繁]葬送的芙莉蓮25-

[繁]因為不是真正的夥

[繁]月光下的異世界之

[簡]北海道辣妹金古錐

[繁]非自願的不死冒險
C & C++ 語言C# 語言Visual Basic 語言PHP 語言JAVA 語言
查看: 3124|回復: 7

[問題] 一些Java(Android)問題請益[複製鏈接]

Rank: 1

帖子
235
積分
153 點
潛水值
19415 米
發表於 2018-10-24 09:21 AM|顯示全部樓層
本帖最後由 RainieYang 於 2018-10-24 05:56 PM 編輯

1.關於 String ,小弟知道他實作了 CharSequence介面, 但toString並沒有實作,去看CharSequence原始碼看到下面這段:
  1. /**
  2.      * Returns a string containing the characters in this sequence in the same
  3.      * order as this sequence.  The length of the string will be the length of
  4.      * this sequence.
  5.      *
  6.      * @return  a string consisting of exactly this sequence of characters
  7.      */
  8.     public String toString();
複製代碼

這樣我不知道算是有實作還是沒實作?
但如果有實作,卻看不到進一步的實作程式碼,這讓小弟有點困惑。
String的toString method(), 或應該說, CharSequence的 toString method() 到底被實作在哪呢?
---------------------------------------------------------------------------------------------------------
補充及更正,小弟自己繼續研究的發現及推測:
String 實作了 CharSequence, 然後String 是有自己實作toString的,小弟的問題說toString沒有在String被實作說錯了,他是有的,方法內直接返回本身 (return this)

但繼續實驗觀察會發現一些有趣的現象:
小弟自己建一個class去實作 CharSequence,結果發現,他強迫你實作的method 一共只有3個(不含toString),他沒有強制要求你實作toString,可是這就奇怪啦,因為CharSequence裡toString並沒有實作,所以應該要被implent他的class實作出來才對,為什麼你不實作是可以被接受的呢?
最後小弟自己做了一些實驗,得出一個推測,因為任何class均繼承Object,所以就算你沒定義toString,你的class依然有toString方法(來自Object),所以他就當作你已經實作toString了... 不會再強迫要求你要實作toString...
這是小弟經過實驗得出的推測。
但這其中還有奇怪的地方是,既然任何class都一定有toString方法,也就是任何class必然已實作toString,那CharSequence的toString介面豈不是形同虛設?  反正一定會被實作出來...

對此有人有任何看法嗎?  小弟猜測這是一個失誤?  Java官方那時實作此介面,希望開發者必須實作toString來將字符串轉成等價的String,但卻沒想到任何class因為已繼承Object,所以必然有toString方法,也就是可以根本不用甩CharSequence提供的toString介面。

此外還有個神奇的小現象,就是當我自己繼承CharSequence後,還是去覆寫toString(當然不覆寫也行,會沿用Object.toString),結果上方跳提醒,希望我加上@NonNull,但是我去檢查不論CharSequence還是Object的toString都沒有@NonNull字樣,那為什麼繼承後卻建議我加上呢?






...
瀏覽完整內容,請先 註冊登入會員
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
3470
積分
3983 點
潛水值
62440 米
發表於 2018-10-24 11:46 PM|顯示全部樓層
回覆中加入附件並不會使你增加積分,請使用主題方式發佈附件。
本帖最後由 kwj 於 2018-10-25 12:04 AM 編輯

不認為那是一個失誤,個人認為比較正確的說法應該是「那是一個提示」。Interface 需要被實作時,跑出來要求三個 method 被實作,那是 IDE 幫你產生的。至於為什麼他要跑出本來其實不需要跑出的 toString(),從另一個角度來思考,如果他沒有跑出來的話,那會有多少開發者沒有意識到他可以實作或者覆寫 toString() 呢?
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
235
積分
153 點
潛水值
19415 米
發表於 2018-10-25 09:17 AM|顯示全部樓層
kwj 發表於 2018-10-24 11:46 PM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

不認為那是一個失誤,個人認為比較正確的說法應該是「那是一個提示」。Interface 需要被實作時,跑出來要求 ...

恩恩,謝謝大大的回答,不過IDE其實沒有跑出toString,但是原本CharSequence的確有toString的介面,我猜測IDE沒有主動跑出toString是因為任何class都有toString(來自Object),所以自動實作了,但這樣CharSequence提供這個介面要求開發者去實作就沒意義了(因為沒有約束力,甚至不會有提示)
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
3470
積分
3983 點
潛水值
62440 米
發表於 2018-10-25 09:44 AM|顯示全部樓層
如果發覺自己無法使用一些功能或出現問題,請按重新整理一次,並待所有網頁內容完全載入後5秒才進行操作。
本帖最後由 kwj 於 2018-10-25 09:45 AM 編輯

個人的想法還是一樣,在 CharSequence 上有 toString() 是為了提示開發者有可能有必要實作它。

如果 IDE 沒有自動跑出來,那我認為問題應該是問「為什麼 IDE 沒有跑出提示」,而不是問「為什麼 CharSequence 需要提供 toString() 介面」。

另外,從 CharSequence 的文件中也可以看到以下的描述:
This interface does not refine the general contracts of the equals and hashCode methods. The result of comparing two objects that implement CharSequence is therefore, in general, undefined. Each object may be implemented by a different class, and there is no guarantee that each class will be capable of testing its instances for equality with those of the other. It is therefore inappropriate to use arbitrary CharSequence instances as elements in a set or as keys in a map.
...
瀏覽完整內容,請先 註冊登入會員
若新密碼無法使用,可能是數據未更新。請使用舊密碼看看。

使用道具檢舉

Rank: 3Rank: 3Rank: 3

帖子
3470
積分
3983 點
潛水值
62440 米
發表於 2018-10-25 09:56 AM|顯示全部樓層
另外修正一下前面的錯誤,本來 @NonNull 這樣的 Annotation 是出現在包含 Android、Spring 等非原生 Java 的函式庫中,不過在 Java 8 中已經被引入成為標準函式庫的一部分了(
下載: 訪客無法瀏覽下載點,請先 註冊登入會員
)。

不過因為這個玩意兒的出現,是基於 Java 8 以前的一大段關於 Null 的亂戰,所以即使出現了也沒有去把過去所有的 class 都更新,個人認為應該還算是可以接受。畢竟因為 Java 8 為了 Null 的問題做了幾個重大的概念變更,這些概念如果完全落實到所有的 class 的話,極有可能會導致世界上眾多老舊的 Java 系統或程式都無法升級 Java 8。...
瀏覽完整內容,請先 註冊登入會員





使用道具檢舉

Rank: 1

帖子
235
積分
153 點
潛水值
19415 米
發表於 2018-10-25 11:22 AM|顯示全部樓層
本帖最後由 RainieYang 於 2018-10-25 11:23 AM 編輯
kwj 發表於 2018-10-25 09:56 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

另外修正一下前面的錯誤,本來 @NonNull 這樣的 Annotation 是出現在包含 Android、Spring 等非原生 Java  ...
...
瀏覽完整內容,請先 註冊登入會員
若瀏覽伊莉的時侯發生問題或不正常情況,請使用Internet Explorer(I.E)。

使用道具檢舉

Rank: 1

帖子
170
積分
186 點
潛水值
5980 米
發表於 2018-10-26 01:34 AM|顯示全部樓層
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
在 Object 的 toString 敘述是「取得一個能夠描述這個物件的、人類看得懂的字串」

    Returns a string containing a concise, human-readable description of this object.

在 CharSequence 的 toString 敘述是「取得一個字串,其中字元的排列順序跟原來的 CharSequence 相同」

    Returns a string with the same characters in the same order as in this sequence.

從語法的角度來看,的確不用改寫就能夠編譯通過並且執行。但是從語義的角度來看,不改寫 toString() 而沿用 Object.toString() 的話,這樣的程式有 bug
...
瀏覽完整內容,請先 註冊登入會員

使用道具檢舉

Rank: 1

帖子
235
積分
153 點
潛水值
19415 米
發表於 2018-10-30 09:30 PM|顯示全部樓層
分享使你變得更實在,可以使其他人感到快樂,分享是我們的動力。今天就來分享你的資訊、圖片或檔案吧。
codewice 發表於 2018-10-26 01:34 AM
下載: 訪客無法瀏覽下載點,請先 註冊登入會員

在 Object 的 toString 敘述是「取得一個能夠描述這個物件的、人類看得懂的字串」

    Returns a string c ...

這位大大一語點醒夢中人啊,其實我看到後來也隱隱有這種想法,我想假設我的推測沒錯的話,那個interface的確只剩這個作用了,但看到有人也提出相同的看法更是堅定了我的信心啊~...
瀏覽完整內容,請先 註冊登入會員
如果你忘記伊莉的密碼,請在登入時按右邊出現的 '找回密碼'。輸入相關資料後送出,系統就會把密碼寄到你的E-Mail。

使用道具檢舉

您需要登錄後才可以回帖 登錄 | 註冊

Powered by Discuz!

© Comsenz Inc.

重要聲明:本討論區是以即時上載留言的方式運作,對所有留言的真實性、完整性及立場等,不負任何法律責任。而一切留言之言論只代表留言者個人意見,並非本網站之立場,用戶不應信賴內容,並應自行判斷內容之真實性。於有關情形下,用戶應尋求專業意見(如涉及醫療、法律或投資等問題)。 由於本討論區受到「即時上載留言」運作方式所規限,故不能完全監察所有留言,若讀者發現有留言出現問題,請聯絡我們。有權刪除任何留言及拒絕任何人士上載留言,同時亦有不刪除留言的權利。切勿上傳和撰寫 侵犯版權(未經授權)、粗言穢語、誹謗、渲染色情暴力或人身攻擊的言論,敬請自律。本網站保留一切法律權利。
回頂部