我有一个类,我们称之为'Words',它会读取一个文件并创建一个字符串列表。
然后我有一个类'Items',它创建一个'description'对象列表,每个描述对象都需要访问'Words'中的列表。
由于'Word'列表读取文件,我显然不想为每个'description'对象创建该列表。那么访问该列表的最佳方式是什么?
我应该从'Words'创建一个函数getList()并将其传递给'Items'构造函数,然后再将它传递给每个'description'吗?或者,还有更好的方法?如果我这样做,那么我也想确保它只是对列表的引用而不是副本,因为'Words'列表可能变得很大。
我对java比较陌生,任何帮助都会受到赞赏。
答案 0 :(得分:4)
我会试着抵制传递那些词汇的诱惑。我没有看到任何封装。
我可能会给初始化和管理单词列表的类提供一个方法,该方法将接受一个Item和一个接口,该接口将显示如何填充或过滤给定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)
您有两种选择:
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();
}
对不起,我没有测试过这段代码,希望它能帮助你在出错的时候想出更好的方法。