Не могу записать сериализуемый объект в файл - PullRequest
1 голос
/ 08 марта 2020

У меня есть 2 класса:


public class BaseEntity<ID> implements Serializable {
    private ID id;

    BaseEntity(ID id){
        this.id = id;
    }
    public ID getId() {
        return id;
    }

    public void setId(ID id) {
        this.id = id;
    }

и


public class Client extends BaseEntity<Integer>{
    private String name;
    private static int lastAssignedId = 0;

    private static int getNewId(){
        lastAssignedId++;
        return lastAssignedId;
    }

    public Client(String name){
        super(getNewId());
        this.name = name;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

, и я пытаюсь записать объект типа Client в файл из класса репозитория:


public class FileRepository<ID, T extends BaseEntity<ID>> extends InMemoryRepository<ID, T>

примерно так


    private void saveToFile(T entity) throws IOException {
        OutputStream outputStream = Files.newOutputStream(Paths.get(this.file), StandardOpenOption.CREATE, StandardOpenOption.APPEND);
        ObjectOutputStream o = new ObjectOutputStream(outputStream);
        o.writeObject(entity);
        o.close();
        outputStream.close();
    }

, где file - это атрибут, данный конструктору. Я получаю следующую ошибку:

Caused by: java.io.NotSerializableException: Model.Client
    at java.base/java.io.ObjectOutputStream.writeObject0(ObjectOutputStream.java:1185)
    at java.base/java.io.ObjectOutputStream.writeObject(ObjectOutputStream.java:349)
    at Repository.FileRepository.saveToFile(FileRepository.java:60)
    at Repository.FileRepository.save(FileRepository.java:53)
    at Service.Service.addClient(Service.java:32)
    at View.View.addClient(View.java:199)
    at View.View.handleAdd(View.java:103)
    at View.View.run(View.java:30)
    at main.main(main.java:12)

Caused by: java.io.NotSerializableException: Model.Client

, вызванную o.writeObject(entity);. Я провел некоторый поиск в Интернете, и того факта, что родительский класс реализует сериализуемый, должно быть достаточно (я также попытался добавить это к дочернему элементу, но он также не работал). Я действительно не понимаю, что я делаю неправильно или отсутствует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...