【发布时间】:2019-01-04 07:58:21
【问题描述】:
有没有办法从包含不同对象的ArrayList 打印不同的数据?
例如,我创建了两个基本类:
import java.util.*;
class Furniture{
String name;
int weight;
Furniture(String name, int weight){
this.name = name;
this.weight = weight;
}
String getName(){
return name;
}
int getWeight(){
return weight;
}
}
}
class Resident{
String name;
Resident(String name){
this.name = name;
}
String getName(){
return name;
}
}
然后我将它们存储在ArrayList<Object> 中并想打印名称,方法是使用下面声明的printArrayList 方法:
public class Main{
public static <E> void printArrayList(ArrayList<E> arrayToPrint){
for(E element : arrayToPrint){
try{
System.out.println(element.getName());
}
catch(Exception e){
System.out.println("Exception e: " + e);
}
}
}
public static void main(String []args){
Furniture sofa = new Furniture("Sofa", 5);
Resident mike = new Resident("Mike");
ArrayList<Object> arrayList = new ArrayList<>();
arrayList.add(sofa);
arrayList.add(mike);
printArrayList(arrayList);
}
现在,我知道并非所有对象都可以有变量名或声明的 get 方法,因此我尝试通过 try/catch 排除这些情况。 我也尝试通过使用 fe 来排除它:
if(elements.getName() == null)
还是一样的结果。
【问题讨论】:
-
在访问它的方法之前,你应该强制转换你的对象。
-
您可以使用
instanceOf方法检查对象是否属于特定类(如element instanceOf Furniture)或使用ReflectionAPI 检查类/变量/方法是否存在 -
我想知道首先在 List 中包含完全不相关的对象是否是个好主意。居民和家具似乎没有任何理由在同一个列表中。如果他们有,他们至少应该共享一个公共接口(@987654331@?),你应该有一个
List<Named>。 -
你的第一个问题是
ArrayList<Object>
标签: java list generics arraylist