每当我在Java中运行这个驱动程序类时,它都会给我这样的信息:
方法
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
)有一个应用列表,例如教育应用。
答案 0 :(得分:2)
<强>问题:强>
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
所以现在我们可以充分利用泛型(编译时类型保护),同时允许同一列表接受不同的子类。
答案 1 :(得分:1)
您声明了一个String类型的arraylist,但后来尝试用其他非字符串实体填充它。
您可能想要创建一个对象的arraylist:
ArrayList<Object> categories = new ArrayList<Object>();
然后你可以通过从arraylist中引用它们来与类进行交互。
我的回答不正确,这无法正常运作。如果您只需要类别和值,则可以使用:
ArrayList<ArrayList<String>> categories = new ArrayList<ArrayList<String>>();
然后,您可以为每个类别创建更多ArrayLists,填充类别,然后将它们添加到顶级ArrayList:
ArrayList<String> medical = new ArrayList<String>();
medical.add("one");
medical.add("two");
medical.add("etc");
categories.add(medical);