-3

在此处输入图像描述 更好的质量:http: //img20.imageshack.us/img20/7802/th3w.png

我做错了什么?Record 是类似于 List 的类。目标:我想保存我RecordsStorage. 我应该重写Storage吗?另附Record class

public class Record {
    private int number;
    private int count;
    private Object code;

    public Record(int number, int count, Object code)
    {
        this.number = number;
        this.count = count;
        this.code = code;
    }

错误:变量“存储”可能尚未初始化

如果我当时没有数据,我无法初始化这个变量。

4

3 回答 3

3

您的storage变量只是声明但从未初始化,因此在使用它时会出错。你至少应该使用:

Storage storage = new Storage();

由于您Storage需要Record创建一个变量,因此更好的策略是

Storage storage = null;
try {
    // ...
    if (storage == null) {
        storage = new Storage(new Record(j, Integer.parseInt(ContentCount), RowContent));
    } else {
        storage.addRecord(j, Integer.parseInt(ContentCount), RowContent));
    }
} catch (...) {
    // ...
}

如您所见,此代码基于您当前的设计,这会导致问题,而不是您的Storage类的可读性和可用性。一些建议:

  • 有一个null带参数的构造函数,因此您可以像我在当前示例中所做的那样避免初始化(请注意,您传递了一个Record参数但从使用它=\)。
  • 强烈建议将该List<Record> record字段的名称更改为表示它是List. 我至少会推荐recordList
  • 您可以创建一个Record并发送此对象,而不是在构造函数中传递所需的参数。

按照这些建议,您的代码应如下所示:

public class Storage {
    List<Record> recordList;
    public Storage() {
        this.recordList = new ArrayList<Record>();
    }
    public void addRecord(Record record) {
        recordList.add(record);
    }
}

// previous code ...
Storage storage = new Storage();
try {
    // ...
    Record record = new Record(j, Integer.parseInt(ContentCount), RowContent));
    storage.add(record);
} catch (...) {
    // ...
}

提示:下次不要显示当前代码的图像,而是显示实际代码的SSCCE

于 2013-08-09T07:00:24.003 回答
1

初始化storage为某个值。像

 Storage storage = new Storage();
于 2013-08-09T07:00:02.467 回答
1

你从不初始化storage

此外,您的 Storage 构造函数似乎不正确。

Storage(Record newRecord){
   this.record = new ArrayList<Record>();
}

您根本没有使用该参数。要么完全删除它(推荐),要么像这样使用它:

Storage(Record newRecord){
       this.record = new ArrayList<Record>();
       this.record.add(newRecord);
    }

另外,我建议将Storage.record字段名称更改为类似recordsor recordCollection。它更容易阅读和理解。

于 2013-08-09T07:03:53.523 回答