Десериализовать ArrayList: требуется [не проверено] неконтролируемое преобразование: ArrayList <Employee>найдено: ArrayList - PullRequest
0 голосов
/ 01 декабря 2019

Я пробую сериализацию и десериализацию Java-приложения. Это работает, но я хотел бы знать, правильно ли я делаю этот процесс. Я сериализую ArrayList;это правильный путь или я должен сериализовать класс Employee, но как мне поступить, учитывая, что у нас может быть много сотрудников?

То, как я это делаю, вызывает эту ошибку, от которой я хотел бы избавиться:

serialTest.java: 40: предупреждение: [не проверено] непроверенное преобразование сотрудников = (ArrayList) ois.readObject ();обязательно: найден ArrayList: предупреждение ArrayList 1

Вот класс Employee: package serialTest;import java.io.Serializable;

public class Employee implements Serializable {

    int id;
    String firstName;
    String lastName;

    public Employee(int id, String firstName, String lastName) {
        super();
        this.id = id;
        this.firstName = firstName;
        this.lastName = lastName;
    }

    @Override
    public String toString() {
        return "Employee [id=" + id + ", firstName=" + firstName + ", lastName=" + lastName + "]";
    }
}

А вот основной класс:

package serialTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;

public class serialTest {

    static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) {
        if (args.length > 0) {
            deSerialize();
        } else {
            employees.add(new Employee(1, "John", "Doe"));
            employees.add(new Employee(2, "Jane", "Doe"));
            serialize();
        }
    }

    private static void serialize() {
        System.out.println("Serializing...");
        try {
            try (FileOutputStream fos = new FileOutputStream("employeeData"); ObjectOutputStream oos = new ObjectOutputStream(fos)) {
                oos.writeObject(employees);
            }
        } catch (IOException ioe) {
        }
    }

    private static void deSerialize() {
        System.out.println("DeSerializing...");
        try {
            try (FileInputStream fis = new FileInputStream("employeeData");
                    ObjectInputStream ois = new ObjectInputStream(fis)) {

                employees = (ArrayList) ois.readObject();

            }
        } catch (IOException ioe) {
            System.out.println("File problems");
            return;
        } catch (ClassNotFoundException c) {
            System.out.println("Class problems");
            return;
        }

        for (Employee info : employees) {
            System.out.println(info);
        }
    }
}

Ответы [ 2 ]

0 голосов
/ 01 декабря 2019

Я придумал решение. Буду признателен за некоторые комментарии.

package serialTest;

import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.util.ArrayList;
import java.util.Arrays;

public class serialTest {

    static ArrayList<Employee> employees = new ArrayList<>();

    public static void main(String[] args) {
        if (args.length > 0) {
            deSerialize();
        } else {
            employees.add(new Employee(1, "John", "Doe"));
            employees.add(new Employee(2, "Jane", "Doe"));
            serialize();
        }
    }

    private static void serialize() {
        System.out.println("Serializing...");
        try {
            try (FileOutputStream fos = new FileOutputStream("employeeData"); 
                    ObjectOutputStream oos = new ObjectOutputStream(fos)) {
                oos.writeObject((Employee[]) employees.toArray(new Employee[employees.size()]));
            }
        } catch (IOException ioe) {
        }
    }

    private static void deSerialize() {
        System.out.println("DeSerializing...");
        try {
            try (FileInputStream fis = new FileInputStream("employeeData");
                    ObjectInputStream ois = new ObjectInputStream(fis)) {

                employees.addAll(Arrays.asList((Employee[]) ois.readObject()));
            }
        } catch (IOException ioe) {
            System.out.println("File problems");
            return;
        } catch (ClassNotFoundException c) {
            System.out.println("Class problems");
            return;
        }

        for (Employee info : employees) {
            System.out.println(info);
        }
    }
}
0 голосов
/ 01 декабря 2019

Вам придется подавить это предупреждение. Java не знает фактического универсального типа из-за стирания типа.

...