在 Java 中,介面Name(擴展CharSequence)什么時候有用?為什么不直接使用final String呢?我沒有看到任何實作Name.
或者,我感興趣的是Name、CharSequence和String類的用例。
uj5u.com熱心網友回復:
它不僅僅是一個字串。
在equals方法的描述中它說:
請注意,名稱的身份是其內容(就字符序列而言)以及創建它的實作的函式。
所以這意味著一個物件實作Name的不僅僅是它的字符表示。它還必須知道創建它的實作。
如果您只想比較您必須使用的內容contentEquals。
但是您可能不會自己使用此介面創建類。它是 Java 語言模型的一部分。
uj5u.com熱心網友回復:
根據評論總結答案:@Mark Rotteveel
這是 java.lang.model.element 包的一部分,它是“用于對 Java 編程語言元素建模的介面”。換句話說,它不是通用的。還有一些實作,但不是在公共 API 中,因為這些介面是 API(例如,在 Temurin 11 中,有
com.sun.tools.javac.util.Name、
com.sun.tools.javac.util.SharedNameTable。 NameImpl 和
com.sun.tools.javac.util.UnsharedNameTable.NameImpl)。
它不僅僅是基于@rghome 答案的字串。
此外,模型也以相同語言提供的原因是:@Zabuzard
它主要用于 Java 提供的元方面,特別是允許您檢查代碼并檢索有關它的元資訊或動態觸發內容的反射 API。例如,通過用戶輸入的名稱呼叫方法。
uj5u.com熱心網友回復:
CharSequence是一個非常通用的介面,比 更重要,并且與人們可以String使用的無處不在的用法相反,因此也可以傳遞一個 StringBuilder 。StringCharSequence
然而pro String (a class ) 計算其明顯的不變性和額外的方法。雖然介面CharSequence本身也沒有可變功能。作為唯一StringBuilder并且String是最有用的實作,人們通常可能會忘記使用CharSequence.
Name是語言建模本身的專用介面。它是一種將值型別(String此處)包裝在其自己的型別中以供特定用途的形式。就像將時間字串包裝在Time. 請注意,對于不區分大小寫的語言,Name#equals可以忽略大小寫(如PascalName implements Name)。類/介面不應在語言建模之外使用。在模型中,名稱可能包含其宣告。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/433704.html
