Редко хорошей идеей является чтение объектов из файла, подобного этому.Тем не менее, все, что вам действительно нужно сделать, это привести результат oIS.readObject()
к ArrayList<Librarian>
вместо переноса его к ArrayList<Object>
(как вы это делаете сейчас), а затем изменить тип возвращаемого значения getLibrarianRecords
.Да, и, естественно, также тип локальной переменной fromFile
.
public static ArrayList<Librarian> getLibrarianRecords(String filename){
ArrayList<Librarian> fromFile = new ArrayList<>(); //Array of
// existing librarians
try{
FileInputStream fIS =
new FileInputStream(SYSTEM_PATH + filename);
ObjectInputStream oIS = new ObjectInputStream(fIS);
fromFile = (ArrayList<Librarian>)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.
}
Тогда не должно быть необходимости циклически перемещаться по списку, чтобы фактически выполнить преобразование типа для элемента за элементом.