物件導向經常談到封裝,然而,封裝的對象或意圖其實是多元的,也許是想隱藏狀態、不曝露實作、遮蔽資料的結構、管理物件複雜的生命週期、隔離物件間的相依關係等,大部分情況下,封裝都意謂著某種程度的隱蔽性,藏起什麼東西之類的。
作為一個資料載體時,只是單純地將某些資料組合為一個概念,例如將兩個小數組合為點的概念,這些資料在名稱、結構,以及聚合後的名稱都是透明的,物件在外觀表現上就是會曝露一切,物件本身提供的API,會與物件想表現的資料合在一起。
這使得資料載體的封裝,與其他的封裝意圖大相徑庭,因為就其他封裝的意圖來說,往往會希望物件本身提供的API,能夠隱藏物件內部的資料等東西,資料載體本身的意圖就是曝露資料的一切。
有時候你就是需要一個物件來表示資料,這就表示你需要的是個資料載體,然而在record類別出現之前,無論是哪種封裝,基本上是透過class來定義,這就造成了過去簡單的需求,也需要囉嗦的定義過程,可以試著只使用class來定義出Point類別,要有公開的x、y(以及hashCode、equals以及toString等方法),是需要一定行數的程式碼吧。