我是Java的新手,我现在正在尝试的是。
例如,我为员工提供了2个类别1,可以提供姓名号码和电子邮件,对于具有编号类型和状态的车辆有1个类别。
我从API检索两个类的数据,并用所有数据填充ArrayList<Employee>
和ArrayList<Vehicle>
。
这两个类都需要通过相同的函数,该函数将基于数据创建一个excel文件。
我目前面临的问题是我想在我的函数中同时使用这两个arraylist,但是基于哪个我可以在函数内部做其他事情,为此,我需要知道将哪个arraylist转发给了功能。我要尝试的操作如下:
我有一个功能
Public static void createExcel(Object[] obj){ //do something }
我给函数指定了Object类型,这样我就可以得到两个arraylists。因此,我按如下方式解析了Arraylist:
ArrayLists<Employee> employees = new ArrayList<>();
employees.add(employee);
Object[] objArray = employees.toArray();
ExcelWriter.createExcel(objArray);
与Vehicle相同。 现在我的问题是如何在createExcel函数中检索传递的数组列表,以及如何从该对象数组获取原始数组列表?还是这不可能,我是否必须以另一种方式做?
编辑:
为了更清楚一点,我希望我的excel函数是这样的:
if(obj == type of ArrayLists<Employee>()){ //retrieve my original employees arraylist here }
与Vehicle相同
答案 0 :(得分:1)
您可以使用instanceof
检查对象的实际类型:
public static void createExcel(Object[] obj){
// Assume array is not empty
Object o = obj[0];
if ( o instanceof Employee ) {
// It's an Employee
}
else if ( o instanceof Vehicule ) {
// It's a Vehicule
}
else {
// Should probably throw an Exception here
}
}
但是,如果您希望根据参数的类型做不同的事情,为什么还要编写一个函数?
答案 1 :(得分:1)
覆盖createExcel method
public static void createExcel(List<Employee> employees){
...
ExcelWriter.createExcel(employees.toArray());
...
}
public static void createExcel(List<Vehicle> vehicles){
...
ExcelWriter.createExcel(vehicles.toArray());
...
}