反序列化ArrayList:[unchecked]需要未经检查的转换:ArrayList <Employee>找到:ArrayList

我正在尝试对Java应用程序进行序列化和反序列化。它正在工作,但是我想知道我是否正确地执行了此过程。我正在序列化ArrayList;这是正确的方法还是应该序列化Employee类,但是考虑到我们可能有很多员工,我将如何处理呢?

我这样做的方式会导致此错误,我想摆脱它:

  

serialTest.java:40:警告:[unchecked]未经检查的转换                   员工=(ArrayList)ois.readObject();必需:找到ArrayList:ArrayList 1警告

这是Employee类:     包serialTest;     导入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);
        }
    }
}
zdh064105 回答:反序列化ArrayList:[unchecked]需要未经检查的转换:ArrayList <Employee>找到:ArrayList

您将不得不禁止显示该警告。由于类型擦除,Java不知道实际的泛型类型。

,

我想出了一个解决方案。不胜感激。

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);
        }
    }
}
本文链接:https://www.f2er.com/2998785.html

大家都在问