序列化Arraylist <customobject>

时间:2016-09-19 21:46:15

标签: java serialization arraylist

我创建了一个名为&#34; Item&#34;的对象,我希望序列化一个包含其中Items的ArrayList。我的程序与ArrayList<String>完美配合,但它不适用于ArrayList<Item>。我相信它与我的对象有关。这是:

public class Item implements Serializable{

private static String name;
private static BufferedImage picture;
private static boolean craftable;
private static Item[][] craftTable;
private static boolean smeltable;
private static Item smelt_ancestor;
private static Item smelt_descendant;

public Item(String name, boolean craftable, boolean smeltable){
    this.name = name;
    this.craftable = craftable;
    if(craftable){
        craftTable = new Item[3][3];
    }else{
        craftTable = null;
    }
    this.picture = null;
    this.smeltable = smeltable;
    this.smelt_ancestor = null;
    this.smelt_descendant = null;
}

public String getName(){
    return name;
}

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

public BufferedImage getPicture(){
    return picture;
}

public boolean setPicture(){
    boolean verify = false;
    String pictureName = name.replaceAll("\\s+","");
    String newNamePng = pictureName + ".png";
    String newNameJpg = pictureName + ".jpg";
    File imagePng = new File(newNamePng);
    File imageJpg = new File(newNameJpg);
    if(imagePng.exists()){
        return true;
    }else if(imageJpg.exists()){
        return true;
    }else{
        return false;
    }
}

public boolean getCraftable(){
    return craftable;
}

public void setCraftable(boolean value){

    this.craftable = value;
}

public boolean setCraftTable(Item[][] table){
    if(this.craftable==true){
        craftTable = table;
        return true;
    }else{
        return false;
    }

}

public Item[][] getCraftTable(){
    return craftTable;
}

public boolean getSmeltable(){
    return smeltable;
}

public void setSmeltable(boolean value){
    smeltable = value;
}

public Item getAncestor(){
    return smelt_ancestor;
}

public void setAncestor(Item ancestor){
    smelt_ancestor = ancestor;
}

public Item getDescendant(){
    return smelt_descendant;
}

public void setDescendant(Item des){
    smelt_descendant = des;
}

public String toString(){
    return name;
}

忽略导入,我在省略的其他方法中使用它们,因为它们完美地工作。对象有什么问题可以阻止它被正确序列化吗?

2 个答案:

答案 0 :(得分:2)

静态变量未序列化。看起来您可能希望那些是非静态实例变量。

答案 1 :(得分:0)

按定义的序列化应用于对象而不是类。 它复制要通过网络或流传输或要存储的对象的状态。 您对静态变量的使用使它们成为类变量,因此它们不会对对象的状态做出贡献。首先要做的是让它们变得非静态。

这给我们留下了你的类,它已经是Serializable,所以是ArrayList。您可以使用ObjectInputStream和ObjectOutputStream对它们进行序列化并对它们进行反序列化,并确保在反序列化结束时在类路径中具有相同的类。