Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Получить копию объекта, Получить копию списка 
:(
    Опции темы
Elfix
Дата 3.1.2016, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Привет!

Есть такая несложная система классов:

Код


package test;

import javafx.beans.property.SimpleIntegerProperty;
import javafx.beans.property.SimpleStringProperty;

public class Student {
    private SimpleIntegerProperty age;
    private SimpleStringProperty surname;
    private SimpleStringProperty name;
    private Region region;

    public Student(String surname, String name, Integer age, Region region) {
        this.surname = new SimpleStringProperty(surname);
        this.name = new SimpleStringProperty(name);
        this.age = new SimpleIntegerProperty(age);
        this.region = region;
    }
}

package test;

import javafx.collections.FXCollections;
import javafx.collections.ObservableList;

public class Organization {
    private ObservableList<Student> students = FXCollections.observableArrayList();

    public ObservableList<Student> getStudents() {
        return this.students;
    }

    public Student createStudent(String surname, String name, Integer age, Region region) {
        Student student = new Student(surname, name, age, region);
        this.students.add(student);
        return student;
    }
}


В классе Organization хранится список всех студентов, через метод createStudent происходит добавление этих студентов в список.
Метод getStudents позволяет получить ссылку на этот список. При этом из внешних классов появляется возможность влезть в приватный список и модифицировать его без каких-либо специальных методов класса Organization (удалить, подменить и др.).

Как вернуть не саму ссылку на объект, а его полную копию?
PM MAIL   Вверх
leniviy
Дата 4.1.2016, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 552
Регистрация: 8.2.2003
Где: Спб

Репутация: нет
Всего: 5



В java нет какого-то унифицированного способа копировать объекты.

Если надо защитить от модификации только сам список, но не объекты внутри него, можно обернуть возвращаемый список:

Код

return new ArrayList(this.students);


Чтобы защитить объекты Student, можно создавать глубокую копию списка (самому написать код или использовать библиотечный метод, например
http://commons.apache.org/proper/commons-l...ationUtils.html

Но если класс Student содержит бизнес логику, то это несколько теряет смысл.


Этот ответ добавлен с нового Винграда - http://vingrad.com
PM MAIL   Вверх
Elfix
Дата 4.1.2016, 11:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 167
Регистрация: 13.7.2005

Репутация: нет
Всего: нет



Спасибо! То что надо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.1986 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.