Списокне сериализуется - PullRequest
0 голосов
/ 29 мая 2018

У меня есть класс Player, в котором есть три переменные, одна из которых - List<List<Box>> и, конечно, класс Box реализует Serializable.Box также имеет некоторые переменные, все они являются примитивными типами, за исключением класса Dice, который тоже реализует Serializable.

Я должен отправить этот класс через сеть с сокетом, и когда яотправьте это на клиентскую сторону, List<List<Box>> выглядит нормально, и каждый Box тоже проблема в том, что класс Dice, который должен быть в Box, всегда имеет значение NULL, даже если тот, который я отправилКлиента с сервера нет и я абсолютно уверен, что сетевая часть верна.

Забыл упомянуть, что List<List<Box>> при создании экземпляра становится ArrayList<ArrayList<Box>>, который должен быть сериализуемым.

Dice class:

package ingsw.model;

import java.io.Serializable;
import java.util.Random;

public class Dice implements Serializable {
    private int faceUpValue;
    private final Color diceColor;

    public Dice(Color diceColor) {
        this.diceColor = diceColor;
    }

    public Dice(int faceUpValue, Color diceColor) {
        this.faceUpValue = faceUpValue;
        this.diceColor = diceColor;
    }

    /**
     * Draft the dice
     * get a random number between 1 and 6 and set the faceUpValue
     */
    void roll() {
        int value = (new Random()).nextInt(6) + 1;
        setFaceUpValue(value);
    }

    public int getFaceUpValue() {
        return faceUpValue;
    }

    public void setFaceUpValue(int faceUpValue) {
        this.faceUpValue = faceUpValue;
    }

    public Color getDiceColor() {
        return diceColor;
    }

    @Override
    public String toString() {
        if (faceUpValue != 0) {
            return diceColor.toString() + String.valueOf(faceUpValue);
        } else {
            return diceColor.toString();
        }
    }
}

Card реализует классСериализуемый:

    public abstract class PatternCard extends Card {
        private int difficulty;
        protected List<List<Box>> grid;

        public PatternCard(String name, int difficulty) {
            super(name);
            fillGrid();
            this.difficulty = difficulty;
        }

        @Override
        public String toString() {
            return "PatternCard{" +
                    "'" + getName() + "'" +
                    '}';
        }

        public int getDifficulty() {
            return difficulty;
        }

        public void setGrid(List<List<Box>> grid) {
            this.grid = grid;
        }

        public List<List<Box>> getGrid() {
            return grid;
        }

        private void fillGrid() {
            this.grid = new ArrayList<>(4);
            this.grid.add(new ArrayList<>(5));
            this.grid.add(new ArrayList<>(5));
            this.grid.add(new ArrayList<>(5));
            this.grid.add(new ArrayList<>(5));
            }
}

Box класс:

public class Box implements Serializable {
    private Color color;
    private Integer value;
    private Dice dice;

    public Box(Color color) {
        this.color = color;
    }

    public Box(Integer value) {
        this.value = value;
    }

    public Color getColor() {
        return color;
    }

    public Integer getValue() {
        return value;
    }

    public boolean isValueSet() {
        return value != null;
    }

    public void insertDice(Dice dice) {
        this.dice = dice;
        //TODO the dice at this point must removed from the dice drafted --> dices (set).remove();
    }

    public void removeDice() {
        if (dice != null) dice = null;
        //TODO dice must be re-added?
    }

    public Dice getDice() {
        return dice;
    }

    @Override
    public String toString() {
        if (isValueSet()) return String.valueOf(value);
        else return color.toString();
    }

    Boolean isDiceSet(){ return dice != null; }
}

Я немного исследовал и подумал, что мне, вероятно, следует сериализовать объект и десериализовать его самостоятельно, но я неНе знаю, может ли это быть настоящей проблемой, так как ArrayLists являются сериализуемыми, и каждый объект, включенный в эти ArrayLists, тоже.

Что может быть не так в этом?

...