AttributeList繼承了ArrayList,不過是在包javax.management包中,看名字,難道叫「屬性」List。結合下面的兩張圖,能夠清晰地看到這個類的關係。java
表示MBean的屬性值的列表。請參閱MBeanServer和MBeanServerConnection的getAttribute和setAttribute方法。安全
出於兼容性的緣由,能夠向AttributeList中添加非屬性實例的對象,儘管這是很是不受鼓勵的。可是,AttributeList能夠是類型安全的,這意味着添加不是屬性的對象的嘗試將產生IllegalArgumentException。當方法asList()被調用時,AttributeList就成爲類型安全的。3d
如下是AttributeList的構造方法,這裏能夠看到初始化的參數和須要是Attribute的列表或者AttributeList。AttributeList(List<Attribute> list)是特有的,其餘是繼承的父類,固然會作一個類型判斷x == null || x instanceof Attribute日誌
而後咱們看看這個add是怎麼實現的,其中比較有興趣的應該是ensureCapacityInternal怎麼處理的對象
其實調用的仍是grow方法,可是實現的稍微有點不一樣,可是爲何類裏又寫一個呢blog
AttributeList裏面的特有方法並很少,能夠看到add和set的方法,用了Object和Attibute兩種方式,就是前面說的兼容性問題嗎?爲何不讓這類作的事情專注一點呢?繼承
爲了搞定上面的問題,做者還寫了一個asList方法,這裏先看一下AttributeList中的兩個字段,一個叫類型安全用來判斷,一個是受污染的,就是混合的表示List結果。asList表示會設施typeSafe等於true,那麼你添加其餘類型的就會報錯了。ci
加asList日誌輸出:get
最後咱們看看Attribute這是一個什麼東西,其實就是一個鍵值對it
下次繼續
有什麼討論的內容,能夠加我公衆號: