我创建了一个名为&#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;
}
忽略导入,我在省略的其他方法中使用它们,因为它们完美地工作。对象有什么问题可以阻止它被正确序列化吗?
答案 0 :(得分:2)
静态变量未序列化。看起来您可能希望那些是非静态实例变量。
答案 1 :(得分:0)
按定义的序列化应用于对象而不是类。 它复制要通过网络或流传输或要存储的对象的状态。 您对静态变量的使用使它们成为类变量,因此它们不会对对象的状态做出贡献。首先要做的是让它们变得非静态。
这给我们留下了你的类,它已经是Serializable,所以是ArrayList。您可以使用ObjectInputStream和ObjectOutputStream对它们进行序列化并对它们进行反序列化,并确保在反序列化结束时在类路径中具有相同的类。