簡體   English   中英

為什么某些類在Android支持庫中不公開?

[英]Why are some classes not public in the Android Support Library?

為什么Android庫中包含的某些類不公開? 對我來說,這沒有任何實際意義,基本上只是為最近發布的一些錯誤的小部件開發臨時修復程序的障礙。

具體來說,我在談論Android設計支持庫中TextInputLayout 例如,如果我想創建一個自定義窗口小部件來覆蓋構造函數中的某些代碼,我就不能這樣做,因為CollapsingTextHelper不是公共類。 我必須下載源代碼並將相關的類復制到我的項目中,但實際上沒有任何東西阻止我這樣做。 那么首先不公開的重點是什么呢?

據我所知,隨着時間的推移,庫會得到更新和改進,您只需添加@Deprecated注釋即可指示特定類是舊的還是過時的,並且只是為了防止遺留代碼中斷。
我知道一個庫只是簡單地公開所有類是沒有意義的,但是我不明白為什么對於實現一個小部件必不可少的類不應該公開。 為什么他們不能只在其中一個類被更好的版本替換時添加@Deprecated注釋,或者什么時候以完全不同的方式實現小部件呢?

簡而言之 - 通過使這些類非公開,他們保留隨時更改/刪除此類的權利,而不會破壞任何客戶端(您的)代碼。

看看已經有多少@Deprecated方法/類,你會明白為什么這很重要。

一旦將公共類添加到庫中,您基本上必須維護它。 你不能簡單地刪除它,因為這將是一個突破性的變化。 因此,您只能將其標記為@Deprecated並繼續維護它的時間遠遠超過實際使用它的時間。


它不僅僅是一個被棄用的課程。 主要是我在談論API和實現細節之間的區別。

如果窗口小部件的內部工作方式不公開,則Google可以完全更改實現,而無需將這些類標記為已棄用。 從長遠來看,這具有多個優點。

他們可以刪除和添加類並更改有關它們的所有內容,而無需擔心保持向后兼容性。 如果第三方開發人員想要使用一些非公開課程,他或她可以很容易地做到這一點。

在Android Studio或IntelliJ中,只需右鍵單擊類並選擇"Go to" -> "Declaration"或使用以下快捷方式,即可查看支持庫的源代碼:

  • Mac: + B
  • Windows: Ctrl + B.

從那以后,將相關的類復制到項目中,修改它們並隨意使用它們非常簡單。


我只想說,在99%的情況下,無論如何你都不需要這樣做。 谷歌肯定會考慮哪些類應該公開,因此是API的一部分,而這只是小部件實現的一部分。

出於同樣的原因,java中的每個其他類/字段/變量(而不僅僅是)都具有訪問修飾符。

如果它不公開,則不打算使用它(根據上下文,封裝等適用於其他修飾符的規則)。

它可能是為了增強或幫助圖書館的深奧功能。

如需特定答案,請將您的問題擴大。 您想使用哪個課程並非公開,您認為它應該是?

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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