![](/img/trans.png)
[英]Can we use generic to allow only specific types instead of any type <T>?
[英]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.