Java ArrayList是从许多类访问同一列表的好方法

Java ArrayList是从许多类访问同一列表的好方法,java,arraylist,static,Java,Arraylist,Static,你好,我正在尝试通过做一个非常简单的“bankaccount”应用程序来熟悉Java,它甚至不保存到db或其他什么东西,所以它会在重新运行时重置所有数据 我试图找到一个好方法解决的问题是,我有一个账户的ArrayList,我希望能够从任何类访问它,这样在运行期间,例如在存款之后,如果我稍后访问该账户,当我想获得余额时,我会从ArrayList获得该账户,并将其更新为存款值 谷歌搜索时我发现了这个解决方案,但我不喜欢它,因为它使用静态ArrayList。对于只在运行时保存状态/数据的应用程序,还有

你好,我正在尝试通过做一个非常简单的“bankaccount”应用程序来熟悉Java,它甚至不保存到db或其他什么东西,所以它会在重新运行时重置所有数据

我试图找到一个好方法解决的问题是,我有一个账户的ArrayList,我希望能够从任何类访问它,这样在运行期间,例如在存款之后,如果我稍后访问该账户,当我想获得余额时,我会从ArrayList获得该账户,并将其更新为存款值

谷歌搜索时我发现了这个解决方案,但我不喜欢它,因为它使用静态ArrayList。对于只在运行时保存状态/数据的应用程序,还有比这更优雅的方法吗

添加测试帐户等的简单类,其中第一个值是acounted,第二个值是balance

public class AccountsModel {

private ArrayList<AccountModel> listOfAccounts;

public AccountsModel() {
    listOfAccounts = new ArrayList<AccountModel>();
    listOfAccounts.add(new AccountModel(1,0));
    listOfAccounts.add(new AccountModel(2,0));
    listOfAccounts.add(new AccountModel(3,0));
    listOfAccounts.add(new AccountModel(4,0));
}

 public ArrayList<AccountModel> getListOfAccounts(){
    return listOfAccounts;
 }
}
公共类AccountsModel{
私人ArrayList会计;
公共帐户模型(){
listOfAccounts=新的ArrayList();
添加(新的AccountModel(1,0));
添加(新的AccountModel(2,0));
新增(新会计模型(3,0));
新增(新会计模型(4,0));
}
公共阵列列表getListOfAccounts(){
返回计数列表;
}
}
然后在我的主课上我就这么做了

static AccountsModel accounts = new AccountsModel();
public static ArrayList<AccountModel> listOfAccounts = accounts.getListOfAccounts();
static AccountsModel accounts=new AccountsModel();
public static ArrayList listOfAccounts=accounts.getListOfAccounts();

这“有效”,因为我可以从应用程序中的任何位置获得相同的列表。但是,有没有其他简单而优雅的方法来实现这一点呢?

你说你不喜欢静态解决方案,但对我来说,“它需要被许多类访问”尖锐地批评了静态变量

基本上,您可以为ArrayList创建一个包装器,该包装器执行以下操作:

class AccountsModel {
    private static ArrayList<AccountModel> singleton;

    // a static constructor also wouldn't be a bad idea here
    public static void init() {
        /* add a bunch of AccountModels here*/
    }

    public static ArrayList<AccountModel> getAccounts() {
        return singleton;
    }
}
类AccountsModel{
私有静态数组列表单例;
//静态构造函数在这里也不是个坏主意
公共静态void init(){
/*在这里添加一组AccountModels*/
}
公共静态ArrayList getAccounts(){
返回单身;
}
}
主要方法的一个示例:

public static void main(String[] args) {
    ArrayList<AccountModel> accounts = AccountModels.getAccounts();
}
publicstaticvoidmain(字符串[]args){
ArrayList accounts=AccountModels.getAccounts();
}

您需要了解一下不同的并发控制模型。实现是次要的。也就是说,如果您打算进行任何读/写操作,可能是一个单例类?也许最好是用地图而不是列表,这样你就可以用一个唯一的键访问一个特定的帐户。无关的:小心那些排版上“相近”的名字。AccountsModel很容易被误解为AccountModel。尽可能避免这种情况。也许你应该使用一个比
getSingleton
更好的名称,因为这个解决方案与singleton模式无关,比如
getAccounts
。是的,我更喜欢这个,因为它看起来比我拥有的更好。谢谢,我会用的