問題:
ArrayList<String>
意味着你要能容納String
對象的數組支持的列表。這限制了add
方法只接受字符串。您所犯的錯誤是您將其他非String
對象傳遞給add
方法。
不好回答1:
最簡單的辦法是將其更改爲ArrayList<Object>
,但這違背了仿製藥的目的。好的是,您現在可以將任何對象傳遞給add
方法。壞事是,你現在可以將任何對象傳遞給add
方法。
不好回答2:
您可以創建三個ArrayList
對象,而不是:
ArrayList<Education> eduCategories [...]
ArrayList<Games> gameCategories [...]
ArrayList<Medical> medCategories [...]
但是,這也是不好的,因爲現在你有三個列表。
很好的回答:
你只需要一個列表。對於這一點,你必須創建一個適當的層次:
創建一個名爲Category
抽象類:
abstract class Category
創建三類Education
,Games
和Medical
,所有擴展Category
:
class Education extends Category
class Games extends Category
class Medical extends Category
ArrayList<Category> categories = new ArrayList<Category>();
categories.add(new Education());
categories.add(new Games()) ;
categories.add(new Medical()) ;
在這種情況下,你限制add
方法只接受一個Category
對象:然後,你可以爲你創建列表。由於Education
,Games
和Medical
都是(通過擴展名)Category
對象,它們將被接受。但是,以下將失敗:
categories.add("some string"); //compilation error: String is not a Category
所以現在我們能夠採取仿製藥(編譯時類型保護),同時允許不同的子類,由同一名單被接受的充分利用。
你覺得'ArrayList'是什麼意思?你瞭解泛型嗎? –
如果你已經聲明你的'ArrayList'包含'String's,你必須添加'String's。 – Christian