如何在java中从对象ArrayList获取ArrayList值?
我有一个如何在java中从对象ArrayList获取ArrayList值?,java,android,object,arraylist,arrayobject,Java,Android,Object,Arraylist,Arrayobject,我有一个对象的ArrayList。我已经在这个ArrayList中添加了一些对象和ArrayList的Strings。我可以很容易地从中获得对象值。现在我的问题是如何从中获取整个ArrayList的Strings 代码段: Person.java public class Person { private String name; private int number; public Learn(String name, int number) { t
对象的ArrayList
。我已经在这个ArrayList
中添加了一些对象和ArrayList
的String
s。我可以很容易地从中获得对象值。现在我的问题是如何从中获取整个ArrayList
的String
s
代码段:
Person.java
public class Person {
private String name;
private int number;
public Learn(String name, int number) {
this.name = name;
this.number= number;
}
public String getName() {
return name;
}
public int getNumber() {
return number;
}
}
现在我已经定义了对象列表
List<Object> itemsList = new ArrayList<>();
现在,我将在索引2处添加一个字符串列表
public void addList(){
List<String> strList = new ArrayList<>();
strList.add("Hello");
strList.add("How");
strList.add("are");
strList.add("you?");
itemsList.add(2, strList);
}
现在我的问题是:如何从itemsList
中获取strList
?使用instanceof
,通过使用instanceof
找到对象
在列表中键入
for(对象对象对象:itemsList){
如果(obj instanceof List){//如果它是列表类型,则键入cast
List str=(List)obj;
for(字符串s:str){
系统输出打印项次;
}
}
}
但是根据评论中的讨论,假设您在List itemsList
中有List
和List
,那么在类型转换时将抛出异常,因为在运行时List
和List
都被视为`列表'
List<String> str = (List<String>) obj; //exception thrown at this line
List str=(List)obj//在此行引发异常
看一看,所以对每种类型使用通用列表,而不是“列表来添加不同的类型”为什么要这样制作数组列表?我在android中有一个异构的recyclerView。我想将整个arrayList传递给这个recyclerView,它可以用来将viewPager显示为一个项List strList=(List)items.getList(…)
,但实际上,为什么呢?因为您正在创建这样一个不同的列表,在检索时,您必须编写if
条件来检查索引处的项实例。但这不是一个好的设计instanceof
也是一项成本高昂的操作。这种方法真是一团糟。为什么不制作一个包含类的接口类型的ArrayList呢。然后让每个类实现该接口。向接口添加一个函数,该函数返回一个标识符。如果我决定向项目添加另一个列表
,以供以后使用,那么会发生什么情况?再进一步想想,对我来说,整个设计方法看起来非常容易出错。它会引发异常,为了避免jdk人员引入generic concept@glainst,我想指出的一点是,虽然这确实解决了问题,但如果将其他属性添加到列表中,将来很容易出错。这个注释可以添加到答案中。@Glains这个问题一开始很容易出错。这应该添加到答案中。@FedericoklezCulloca这是真的,但是你仍然可以给出一个好的答案,即使是一个糟糕的问题。
Person person = (Person) itemsList.get(0);
System.out.println(person.getName); // Alex
for(Object obj : itemsList) {
if(obj instanceof List) { //if it is List type then type cast it
List<String> str = (List<String>) obj;
for(String s : str) {
System.out.println(s);
}
}
}
List<String> str = (List<String>) obj; //exception thrown at this line