【问题标题】:Saving an object that contains a list of objects to the disk将包含对象列表的对象保存到磁盘
【发布时间】:2014-05-30 09:36:09
【问题描述】:

标题可能有点令人困惑甚至误导,但我试图将一个作为属性包含对象列表 (ArrayList) 的对象保存到磁盘。

问题是这个对象没有列表就不能做任何事情。

我已尝试对对象和列表进行序列化。当我尝试单独序列化对象时,其中没有任何内容,列表为空。当我尝试序列化列表时,我可以访问列表,更改它,但会引发许多异常。

public class AdressBook implements Serializable {

    /**
     * 
     */
    private static final long serialVersionUID = 6399534374362987383L;

    static Reader reader = new KeyboardReader();

    static ArrayList<Contact> AdressBook = new ArrayList<Contact>();

    public AdressBook(){

    }

    public static void AddContact(){
        AdressBook.add(new Contact());
    }

    public static void EditContact(){
        System.out.println("Which contact you desire to edit?");
        Libreta.Display();
        System.out.println("Type in the number of the contact.");
        int i = (reader.readint() - 1);

        System.out.println("Choose the change 1.Name 2.Last Name 3.Nickname 4.Phone number 5.Emails");
        int j = reader.readint();

               switch(j){

        case 1: AdressBook.get(i).setName();
                break;

        case 2: AdressBook.get(i).setLastName();
                break;

        case 3: AdressBook.get(i).setNick();
                break;

        case 4: AdressBook.get(i).AddPhoneNumber();
                break;

        case 5: AdressBook.get(i).AddEmail();
                break;

        default : System.out.println("Not a valid option");

        }

我必须能够编辑对象列表并能够以某种方式再次保存它。我一直在尝试很多方法,但我缺乏知识,或者它对我不起作用。

【问题讨论】:

标签: java serialization arraylist save deserialization


【解决方案1】:

您的地址簿变量不应声明为静态变量,因为静态变量不会被序列化。使它成为一个实例(非静态)变量,如下所示:

public class AddressBook implements Serializable {
...
  ArrayList<Contact> contacts = new ArrayList<Contact>();
...
}

【讨论】:

    【解决方案2】:

    我认为您的问题是您的 ArrayList 是一个静态字段(有时称为类字段),并且序列化发生在不在类中的对象实例中。

    所以你应该替换你的静态字段和静态方法,例如等价物。

    (现在,只是一个评论:您应该尝试使用 java 命名约定 - 为字段和方法名称使用较低的首字母 - java 编码人员很容易理解您... ;-)

    【讨论】:

      猜你喜欢
      • 2011-04-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多