簡體   English   中英

僅允許ArrayList中的特定類型

[英]Only allow specific types in an ArrayList

有沒有一種方法可以對ArrayList類進行子類化,以僅允許特定類(或其子類)的對象。
具體來說,我有一個稱為RecordStatus的基類,並且需要使用基於該類的對象創建ArrayLists。
我知道創建基於ArrayList<RecordStatus>的類很容易,但是每次我從數組中檢索元素時,都需要將其轉換為原始類。
有更簡單的方法嗎?

有沒有一種方法可以對ArrayList類進行子類化,以僅允許特定類(或其子類)的對象。 具體來說,我有一個稱為RecordStatus的基類,並且需要使用基於該類的對象創建ArrayLists。

這正是Java中的通用構造允許您執行的操作。 請注意,您不必投的情況下,走出你的ArrayList<RecordStatus>只要所有子類RecordStatus具有相同的API。 僅在子類具有不同的方法/字段時才需要這樣做。 例如,如果RecordStatus具有方法setStatus ,並且子類也具有方法,則無需強制轉換,因為Java多態性的動態調度將確保所實現的方法基於實例所基於的實例​​的類型是正確的。在運行時調用。

如果正確設置類型,則無需強制轉換任何內容。 例如,這應該工作:

List<RecordStatus> myList = new ArrayList<RecordStatus>();
//Add values to the list
RecordStatus myRecordStatus = myList.get(0);

但是,如果您確實想繼承ArrayList的子類,則可以執行以下操作:

private class MyArrayList<R extends RecordStatus> extends ArrayList<R> {
      ...
}

ArrayList<? extends RecordStatus> ArrayList<? extends RecordStatus>盡可能地接近。

我創建了arrayList,使用這樣的一行沒有麻煩

List<RecordStatus> list = new ArrayList<RecordStatus>();

嘗試Collections.checkedList(List<E> list, Class<E> type) 這將確保類型安全。

暫無
暫無

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

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