从另一个类访问一个类中List的最佳方法

时间:2012-01-18 01:30:51

标签: java list pass-by-reference

我有一个类,我们称之为'Words',它会读取一个文件并创建一个字符串列表。

然后我有一个类'Items',它创建一个'description'对象列表,每个描述对象都需要访问'Words'中的列表。

由于'Word'列表读取文件,我显然不想为每个'description'对象创建该列表。那么访问该列表的最佳方式是什么?

我应该从'Words'创建一个函数getList()并将其传递给'Items'构造函数,然后再将它传递给每个'description'吗?或者,还有更好的方法?如果我这样做,那么我也想确保它只是对列表的引用而不是副本,因为'Words'列表可能变得很大。

我对java比较陌生,任何帮助都会受到赞赏。

4 个答案:

答案 0 :(得分:4)

我会试着抵制传递那些词汇的诱惑。我没有看到任何封装。

我可能会给初始化和管理单词列表的类提供一个方法,该方法将接受一个I​​tem和一个接口,该接口将显示如何填充或过滤给定Item的单词列表。

我猜测与项目相关联的单词数量是较大整数的一小部分,项目数量是可管理的。

我只是想看到你没有把对象变成哑结构或数据传输对象,这些对象揭示了有关其内部状态的所有信息。如果可以,将行为封装在对象内部并隐藏细节和复杂性。那个班的客户会感谢你。

更新:根据您在下面的评论,我想知道关系数据库是否是您真正需要的。物品需要一份描述清单;它是关系数据库中的简单JOIN和映射到对象。

解析和填充表格是一次性的事情。您的Java应用程序只能查询已给出描述的Item实例。例如,您可以要求它告诉您所有具有描述“foo”的项目。使用内存中的Java对象可能会费力且效率低下。让关系优化器为您加速。您也不必同时在内存中拥有所有对象。只需查询您的需求。

答案 1 :(得分:2)

您需要创建一个用于化合String对象List的类(单例),在描述类的构造函数中调用该singleTon方法,以将列表的引用分配给{{1对象。

description

在描述课程中,

public class Words
{
   private static ArrayList<String> words;
   public static ArrayList<String> getWords() 
   {
      if(words==null) 
        {
          words=new ArrayList<String>();
          //read strings from the file and add them into list
        }
      return words;
    }
}

答案 2 :(得分:0)

您有两种选择:

  • 如您所述,您可以使用getList()从Words中检索列表。然后,通过其构造函数将列表传递给新的描述对象。
  • 您可以将单词列表声明为public static。这将允许您引用List by class引用; Words.list;

第一种解决方案可能是您的最佳选择,因为通常不需要声明静态变量。

答案 3 :(得分:0)

我想做如下:

public class Words{
    private static List words;
    private Words();
    public static List getInstance(){
         if(words == null){
              words = getFile();
         }
         return words;
    }
    private List getFile(){
        //get file
    }
}

public class Items{
    public List items = Words.getInstance();
}

对不起,我没有测试过这段代码,希望它能帮助你在出错的时候想出更好的方法。