我敢肯定,一個明顯的例外是,如果您想要一個僅在其宣告的范圍內使用的變數,但除此之外,如果您希望它是只讀的,大多數變數是否可以通過私有集公開,或者如果為出于某種原因,您希望它只寫?還是有其他我不知道的原因?
這可能被認為是一個明顯的答案,也許不是,但這更多地只是證實了我作為一個有 Java 經驗并且習慣于必須將所有實體變數宣告為私有和使用 getter/setter 方法的人的知識。
uj5u.com熱心網友回復:
與 Java 中等效的 getter 和 setter 相同的基本可見性決策也適用。您通常不會為類中的每個欄位創建 getter,只為從外部使用它所必需的那些。
有時封裝只是意味著不暴露超出您需要的內容。公開暴露許多在類之外沒有用處的 getter 的類更難使用。IDE 中的自動完成功能會建議一堆你不需要的東西,而且任何人都需要更長的時間才能查看你班級的公共成員并了解如何使用它。
請注意,Kotlin 不允許您var使用比 getter 具有更高可見性的 setter 來定義 a。
與您的問題有關的一件事……如果您擔心它們的設定器將來可能會變得更加復雜,則無需防御性地將屬性設為私有。例如,在 Java 中,您經常必須抵制暴露公共欄位的簡單性,因為它會阻止在不破壞外部代碼的情況下更改欄位的使用方式或添加副作用來設定它,因此您通常使用帶有公共設定器的私有欄位即使是瑣碎的領域。在 Kotlin 中,您永遠不會公開公開欄位。您的屬性可以是沒有自定義 getter 或 setter 的簡單屬性,但您將來仍然可以靈活地更改它們以使用自定義 getter 或 setter 以及私有支持屬性等,而無需修改類的公共面。
以下是我認為從 Java 映射到 Kotlin 的方式
| 爪哇 | 科特林 |
|---|---|
| 私有欄位,沒有 getter 或 setter | private val或者private var |
| 私有欄位,公共 getter,沒有 setter | public val或public var與private set |
| 私有欄位、公共 getter 和公共 setter | public var |
| 私有欄位,沒有 getter,公共 setter | private var和public fun set...() |
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/463423.html
