Почему методы установки не обновляют Object? - PullRequest
0 голосов
/ 15 мая 2019

Я хочу обновить объект Contact, который имеет 2 поля - name & phoneNumber.К сожалению, я не знаю, почему методы установки не работают.

Сначала я попробовал с #1 версией метода updateContact () - код ниже.Я думаю, что это может иметь что-то с обновлением ссылки на объект, а не сам объект?Я не уверен.

Если кто-нибудь может мне это объяснить, почему код с установщиками не работает ... - Я имею в виду, что он обновляет «контакт» внутри функции, но не обновляет контакт в ArrayList-контактах.

Метод #2 работает, но я не уверен, что это хорошая идея / решение - ну, это работает ... но я думаю, что с сеттерами это должно работать также.

1

    public void updateContact(String name) {

        Contact contact = findContact(name);

        System.out.print("Enter new name: ");
        contact.setName(scanner.nextLine());

        System.out.print("Enter new phone number (9 numbers): ");
        contact.setPhoneNumber(scanner.nextLine());
    }

2

    public void updateContact(String name) {

        Contact contact = findContact(name);

        String replaceName;
        String replaceNumber;

        System.out.print("Enter new name: ");
        replaceName = scanner.nextLine();

        System.out.print("Enter new phone number (9 numbers): ");
        replaceNumber = scanner.nextLine();

        Contact replace = new Contact(replaceName, replaceNumber);

        contacts.set(contacts.indexOf(contact), replace);
    }

метод findContact

    public Contact findContact(String name) {

        Contact currentContact = null;

        for (Contact contact : contacts) {
            if (contact.getName().equals(name)) {
                currentContact = new Contact(name, contact.getPhoneNumber());
            }
        }

        return currentContact;
    }

Заранее спасибо за помощь.

1 Ответ

2 голосов
/ 15 мая 2019

Ваш метод findContact () не возвращает ссылку на объект Contact в ArrayList, вместо этого вы создаете новый объект с копией данных, а затем возвращаете его.

Измените его следующим образом, и ваш первый подход должен сработать:

public Contact findContact(String name) {

    Contact currentContact = null;

    for (Contact contact : contacts) {
        if (contact.getName().equals(name)) {
            currentContact = contact;
            break;
        }
    }

    return currentContact;
}
...