Как бы я глубоко скопировал вектор в J2ME / BlackBerry? - PullRequest
5 голосов
/ 22 марта 2010

Как бы я глубоко скопировал вектор в J2ME / BlackBerry?

Ответы [ 3 ]

7 голосов
/ 22 марта 2010

К сожалению, нет надежного способа сделать глубокое копирование вектора объектов.

Просто краткий обзор того, что я считаю «глубокой копией»: глубокая копия - это копия, в которую копируется не только содержимое коллекции (в данном случае, вектор), но и объекты, содержащиеся вВектор копируется независимо.Другими словами: если вектор V содержит A и сделана копия (V ') V, копия A (A') в V 'не подвержена изменениям A и наоборот.

Как правило, это будет реализовано путем «клонирования» объекта.К сожалению, если у вас нет контроля над объектами в векторе, у вас нет разумного способа их клонирования, тем более что JavaME не обладает интерфейсом Cloneable (насколько я мог найти).

Конечно,если вы действительно управляете объектами, вы можете создать свой собственный интерфейс Cloneable, который определяет метод clone (), который возвращает полностью независимую копию объекта.Затем вы должны убедиться, что ваш специальный клонирующий Вектор принимает только те объекты, которые реализуют этот интерфейс.Отсюда довольно легко (по кодам) создать вектор, который может клонировать себя.

4 голосов
/ 23 марта 2010

Поскольку вы пометили это как BlackBerry, а не только J2ME, следует упомянуть, что существует класс CloneableVector, который является частью API BlackBerry. Если вы пытаетесь придерживаться строгого J2ME, это будет бесполезно. Однако, если вы только нацеливаетесь на BlackBerry, тогда он соответствует вашим потребностям.

net.rim.device.api.util.CloneableVector документация

2 голосов
/ 22 марта 2010

Вам нужно будет скопировать содержимое вашего вектора с помощью цикла.

Enumeration e = projects.elements();
while (e.hasMoreElements()) {
    this.projects.addElement((Project) e.nextElement());
}

Нужна дополнительная информация, см. Форум Java стр. 2, ответ 18, ответ есть.

...