2014-01-21 58 views
-7

每當我在Java中運行這個驅動程序類,它給了我這個消息:爲什麼它給我錯誤「方法ArrayList.add(String)不適用」?

方法java.util.ArrayList.add(java.lang.String)不適用。

我做一個ArrayList,這裏是我的代碼:

ArrayList<String> categories = new ArrayList<String>(); 

categories.add(new Education()); 
categories.add(new Games()) ; 
categories.add(new Medical()) ; 

這是給我的.add錯誤。

我寫出了Education,Games,Medical這樣的,因爲我有我想要它連接到單獨的類。這些獨立的課程(例如Education)具有應用程序列表,例如教育應用程序。

+8

你覺得'ArrayList '是什麼意思?你瞭解泛型嗎? –

+0

如果你已經聲明你的'ArrayList'包含'String's,你必須添加'String's。 – Christian

回答

2

問題:

ArrayList<String>意味着你要能容納String對象的數組支持的列表。這限制了add方法只接受字符串。您所犯的錯誤是您將其他非String對象傳遞給add方法。

不好回答1:

最簡單的辦法是將其更改爲ArrayList<Object>,但這違背了仿製藥的目的。好的是,您現在可以將任何對象傳遞給add方法。壞事是,你現在可以將任何對象傳遞給add方法。

不好回答2:

您可以創建三個ArrayList對象,而不是:

ArrayList<Education> eduCategories [...] 
ArrayList<Games> gameCategories [...] 
ArrayList<Medical> medCategories [...] 

但是,這也是不好的,因爲現在你有三個列表。

很好的回答:

你只需要一個列表。對於這一點,你必須創建一個適當的層次:

  1. 創建一個名爲Category抽象類:

    abstract class Category 
    
  2. 創建三類EducationGamesMedical,所有擴展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對象:然後,你可以爲你創建列表。由於EducationGamesMedical都是(通過擴展名)Category對象,它們將被接受。但是,以下將失敗:

categories.add("some string"); //compilation error: String is not a Category 

所以現在我們能夠採取仿製藥(編譯時類型保護),同時允許不同的子類,由同一名單被接受的充分利用。

+0

好的,我明白你在說什麼,但是我在哪裏放置ArrayList ?在司機課還是抽象的? – user3191697

+0

將您的原始代碼'ArrayList '更改爲'ArrayList '(無論哪裏 - 您應該知道)。 – ADTC

+0

好吧,所以我一直在做這個,它的工作,但現在我該如何保存應用程序名稱。例如,我在哪裏可以保存教育應用程序?我正在考慮在班級「教育」中列出一個數組列表,但我不知道這是否正確。 – user3191697

1

您聲明一個String類型的數組列表,然後嘗試用其他非字符串實體填充它。

很可能,你想創建對象的ArrayList:

ArrayList<Object> categories = new ArrayList<Object>(); 

然後你就可以通過從ArrayList中引用它們與類交互。

我的回答不正確,這將無法正常工作。如果你需要的是類別和值,你可以用:

ArrayList<ArrayList<String>> categories = new ArrayList<ArrayList<String>>(); 

然後您可以創建爲每個類別更多的ArrayList,填充類,然後將它們添加到頂級的ArrayList:

ArrayList<String> medical = new ArrayList<String>(); 
medical.add("one"); 
medical.add("two"); 
medical.add("etc"); 
categories.add(medical); 
+1

雖然這會解決'.add()'失敗的問題,但這是一個糟糕的答案,只會導致OP的進一步混淆。編輯也一樣糟糕。 –

+0

@BrianRoach你會如何建議我接近任務呢? – lightandlight

+0

通過不給壞的建議。 OP的*真實*問題太廣泛了,除非你想在他的課堂上猜測他們應該做什麼,然後提供一個完整的重新設計,否則這個問題太廣泛了。可能就像他們真的只需要一個'Map >'時期來表示他們的數據一樣簡單,或者他們確實需要一個合適的類層次結構,頂層是'Category' –

相關問題