У меня есть класс 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, тоже.
Что может быть не так в этом?