将ArrayList从对象更改为更特定的类型

时间:2018-11-22 20:54:32

标签: java object arraylist file-handling object-type

是否可以将数组列表的对象类型从对象ArrayList更改为特定的对象ArrayList。我已经尝试过使用每个。另外,有没有一种方法可以更改文件处理方法,使其可以根据读取的文件返回特定类型,而无需复制代码?

我的尝试:

ArrayList<Object> librarianList = FileHandling.getLibrarianRecords(fileName);
ArrayList<Librarian> libList = new ArrayList<>();
for (Object addType: librarianList) {
libList.add(addType);
}

getLibrarianRecords代码

public static ArrayList<Object> getLibrarianRecords(String filename){
                ArrayList<Object> fromFile = new ArrayList<>(); //Array of
                // existing librarians

                try{
                        FileInputStream fIS =
                                new FileInputStream(SYSTEM_PATH + filename);
                        ObjectInputStream oIS = new ObjectInputStream(fIS);
                        fromFile = (ArrayList<Object>)oIS.readObject();
                } catch (IOException ex){
                        System.out.println("Failed to read from file " + ex.getMessage());
                        ex.printStackTrace(); //Catches an IO exception.
                } catch (ClassNotFoundException ex){
                        System.out.println("Error class not found" + ex.getMessage());
                        ex.printStackTrace(); //Catches a class not found
                        // exception.
                }

                return fromFile; //Returns the array list.
        }

3 个答案:

答案 0 :(得分:1)

从这样的文件中读取对象很少是一个好主意。就是说,您真正需要做的就是将oIS.readObject()的结果强制转换为ArrayList<Librarian>而不是将其携带到ArrayList<Object>(如您现在所做的那样),然后修改{的返回类型{1}}。哦,自然也就是局部变量getLibrarianRecords的类型。

fromFile

然后就不需要遍历列表,而是逐个元素地进行类型转换。

答案 1 :(得分:0)

感谢@ user3170251建议铸造

ArrayList<Object> librarianList = FileHandling.getLibrarianRecords(fileName);
ArrayList<Librarian> libList = new ArrayList<>();
for (Object addType: librarianList) {
libList.add((Librarian) addType);
}

要更改类型,它确实起作用。

答案 2 :(得分:0)

您可以使用此通用类定义

class ArrayListConverter<T> {
  List<T> cast;
  public ArrayListConverter(List<T> typeList){
   cast = new ArrayList<>();
   for (Object addType: typeList) {
      cast.add((T)addType);
   }

  }
  public List<T> getList(){
     return cast;
  }

}

只需执行以下操作:

ArrayListConverter<Librarian> conv = new ArrayListConverter<>(libList);
ArrayList<Librarian> libListOg  = conv.getList();