Можно ли применять методы-мутаторы к объектам в ArrayList? - PullRequest
2 голосов
/ 28 мая 2011

У меня возникли некоторые проблемы с моей Java-программой, и я не уверен, что это проблема, но вызовет ли метод мутатора для объекта внутри araylist, как задумано?

Например

public class Account
{
    private int balance = 0;

    public Account(){}

    public void setAmount(int amt)
    {
         balance = amt;
    }
}


public class Bank
{
    ArrayList<Account> accounts = new ArrayList<Account>();

    public staic void main(String[] args)
    {
        accounts.add(new Account());
        accounts.add(new Account());
        accounts.add(new Account());

        accounts.get(0).setAmount(50);
    }
}

Будет ли это работать как задумано, или есть что-то, из-за чего это не получится?

Ответы [ 2 ]

2 голосов
/ 28 мая 2011

Да, это должно работать как задумано.Он ничем не отличается от:

Account firstAccount = accounts.get(0);
firstAccount.setAmount(50);

Помните, ArrayList метод *1004* возвращает фактический объект, хранящийся в ArrayList, а не его копию.

2 голосов
/ 28 мая 2011

Является ли проблема, но вызовет ли метод мутатора для объекта внутри ArrayList работу, как задумано?

Да, если вы собираетесь обновить первую учетную запись в списке. Имейте в виду, что список массивов не хранит объекты, но ссылается на на объекты. Мутация одного из объектов не изменит ссылку, хранящуюся в списке.

Первый аккаунт будет обновлен, и при повторном обращении к accounts.get(0) будет показан обновленный баланс.

Вот демонстрация ideone.com , демонстрирующая это. (Я только что исправил несколько мелких опечаток, таких как добавление static перед объявлением accounts.)

for (int i = 0; i < accounts.size(); i++)
    System.out.println("Balance of account " + i + ": " +
                       accounts.get(i).balance);

выходы

Balance of account 0: 50
Balance of account 1: 0
Balance of account 2: 0

что, мы надеемся, это то, что вы ожидаете.

...