Форум программистов, компьютерный форум, киберфорум
Java SE (J2SE)
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.95/21: Рейтинг темы: голосов - 21, средняя оценка - 4.95
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208

Клонирование объекта

09.06.2013, 18:44. Показов 4497. Ответов 51
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
есть метод. ему в качестве параметра передается объект (объект типа JEditorPane). в этом методе нужно клонировать этот объект. но метода clone() нет в этом объекте. И разве по умолчанию объекты(типов с API) не implements Cloneable?
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
09.06.2013, 18:44
Ответы с готовыми решениями:

Клонирование объекта
По заданному интерфейсу пишу класс вектора стандартного. Не проходят тесты для метода clone (). Объясните, пожалуйста, что я делаю не так?...

Клонирование объекта
Здравствуйте, есть класс Student с полем marks (массив) и есть два объекта этого класса studentOne и studentTwo. Объект studentOne...

Клонирование объекта
Всем привет ! :) Как известно, в Java, есть 3 способа клонирования объекта: 1. С использованием интерфейса Cloneable; 2. С...

51
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 22:24
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от verylazy Посмотреть сообщение
Дело не только в том, что Clonator наследовался от JEditPane.
Там конструктору передается объект.
Так и хочется написать "ссылка на объект"
И что? Во 1 он приватный
Во 2 это таже самая ссылка которую вы туда поместили ,то есть таким способом клонирование не возможно...!

Добавлено через 1 минуту
Цитата Сообщение от animator404 Посмотреть сообщение
так все-таки. как клонировать объект который не implements Cloneable?
Возможно попробовать расширить его класc ,затем этим классом реализовать Cloneable не?
1
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 22:26  [ТС]
Care, я бы так и сделал и не создавал эту тему. Но не хочется как-то делать новый унаследованый класс от JEditorPane.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 22:29
например так :
Java
1
class Clonator extends JEditorPane implements Cloneable
Добавлено через 1 минуту
Цитата Сообщение от animator404 Посмотреть сообщение
Но не хочется как-то делать новый унаследованый класс от JEditorPane.
И почему же?? Какая разница? Используйте объекты этого класса как Объекты JEditorPane ведь все унаследовано...
Я не вижу причины почему так не сделать...
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
09.06.2013, 22:30
Замечания приняты, я был не очень прав.
С интерфейсом Cloneable как-то все мудрено получается.
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 22:33  [ТС]
Care, да. Наверное нужно было сделать так с самого начала и не парится. Просто думал, в этой теме посоветуют что-то другое.

verylazy, странно почему на stackoverflow.com ваш совет (точнее кого-то другого) набрал так много репутации.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 22:37
Да и странно что я все 3 месяца как учу Java а на вашем форуме такое не заметили... Мб вы не так поняли? Там я так понял все на инглише?
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 22:47  [ТС]
Care, молодец.
Плохо, что нет другого способа клонировать объект если он не реализует интерфейсы Serializable и(или) Cloneable. Вот интересная статья у вики http://en.wikipedia.org/wiki/Object_copy#In_Java
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
09.06.2013, 23:12
Я еще не до конца уверен, но проверьте сами вашу версию с implements Cloneable.
Все правильно написано?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Test {
     
    public static void main(String[] args) throws IOException, CloneNotSupportedException {
 
        Clonator jp = new Clonator();
        jp.setText("test");
        
        Clonator jpn = jp.clone();
        
        System.out.println(jp.getText() + "  " + jpn.getText());
        
        jp.setText("123");
        System.out.println(jp.getText() + "  " + jpn.getText());
        jpn.setText("nnn");
        System.out.println(jp.getText() + "  " + jpn.getText());
    }
}
 
class Clonator extends JEditorPane implements Cloneable {
 
    public Clonator clone() throws CloneNotSupportedException {
        Clonator obj=(Clonator)super.clone();
        return obj;
    }
}
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 23:15  [ТС]
verylazy, по моему это делается не так. Но сейчас посмотрю.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
09.06.2013, 23:17
Я еще не до конца уверен, но проверьте сами вашу версию с implements Cloneable.
Все правильно написано?
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
public class Test {
     
    public static void main(String[] args) throws IOException, CloneNotSupportedException {
 
        Clonator jp = new Clonator();
        jp.setText("test");
        
        Clonator jpn = jp.clone();
        
        System.out.println(jp.getText() + "  " + jpn.getText());
        
        jp.setText("123");
        System.out.println(jp.getText() + "  " + jpn.getText());
        jpn.setText("nnn");
        System.out.println(jp.getText() + "  " + jpn.getText());
    }
}
 
class Clonator extends JEditorPane implements Cloneable {
 
    public Clonator clone() throws CloneNotSupportedException {
        Clonator obj=(Clonator)super.clone();
        return obj;
    }
}
Клонируются значения только примитивных типов (с) не мой.

Мне мысль пришла - делаем метод, в котором создается новый объект нужного класса и в него переписываются все нужные поля с объекта-исходника
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 23:33  [ТС]
verylazy, да, что-то не складывается. Наверное нужно применять глубокое клонирование.
0
 Аватар для verylazy
462 / 462 / 71
Регистрация: 26.02.2013
Сообщений: 1,263
09.06.2013, 23:37
Нужно решить для чего нужно делать клон объекта. Что бы меньше полей переписывать при инициализации?
И почему нужно пользоваться именно JEditorPane, а не клепать объекты из своего класса, который наследуется от JEditorPane ? Это же удобно, имхо.
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 23:42  [ТС]
мда... вот здесь http://stackoverflow.com/quest... -cloneable все твердят, что лучше не использовать Cloneable
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 23:46
Если Объект содержит ссылочные переменные то придеться клонировать и их... Почитайте Хорстмана там все написано про это...
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 23:47  [ТС]
verylazy, в твоем коде все верно. В копии создается ссылка на какое-то поле Text объекта jp. И когда ты изменяеш это поле с любого объекта, это видно и с другого объекта. Здесь все верно. Ведь ссылка на это поле одна на 2 обьекта. Здесь нужно быть острожным. Ех, какая это опасная штука клонирование.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 23:48
Если не хотите париться с клонированием всех ссылочных переменных то используйте сериализацию ... Вообще зачем вам клонирование??? Мб можно обойтись без этого?
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
09.06.2013, 23:51  [ТС]
Care, . Весь бред заключается в том, что мне захотелось клонировать объект, чтобы этот клон сериализовать.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
09.06.2013, 23:55
Цитата Сообщение от animator404 Посмотреть сообщение
Care, . Весь бред заключается в том, что мне захотелось клонировать объект, чтобы этот клон сериализовать.
XD XD
0
 Аватар для animator404
99 / 99 / 12
Регистрация: 05.05.2013
Сообщений: 1,208
10.06.2013, 00:02  [ТС]
Care, вы наверное со мной согласитесь, что если пользователь работает в текстовом редакторе (JEditorPane), то сохранять(сериализовать) объект нужно в другом потоке. Но потоки я еще не начал учить. И придумал себе, что нужно сначала клонировать JEditorPane(да, целиком, а не только текст) и его уже сериализовать.
0
77 / 33 / 9
Регистрация: 04.06.2013
Сообщений: 295
10.06.2013, 00:13
Цитата Сообщение от animator404 Посмотреть сообщение
то сохранять(сериализовать) объект нужно в другом потоке
Не понял какой Объект? Ведь текстовой области только тескст ... я не понимаю о каких объектах идет речь...
Опишите свою программу... А насчет потоков то я сам не профи только знаю про Потоки ввода и вывода , а вот про программные потоки я совсем не как ....

Добавлено через 6 минут
Если вы хотите сохранять текст ,то мб просто создать temp файл и там хранить текс ,хотя я не понимаю если весь текст можно например хранить в списке или массиве ,а по завершение программы делать что-то типо лога и записывать все содержимое списка (листа,массива) в файл...
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.06.2013, 00:13
Помогаю со студенческими работами здесь

Глубокое клонирование объекта, содержащий массив объектов
Добрый вечер. Есть перечисление MyEnum и класс с массивом перечислений class A{ MyEnum enum; public GameState clone()...

Клонирование слова в ArrayList
Здравствуйте, решаю задачку из JavaRush, вот условие: Буква «р» и буква «л» 1. Создай список слов, заполни его самостоятельно. 2....

Почему клонирование не работает с интерфейсом
Вот первый вариант, который работает: HashSet<String> newset = new HashSet(); // creating two hash sets ...

Что значит глубокое клонирование?
Я понимаю, что такое поверхностное клонирование, но не могу реализовать глубокое, ибо не понимаю, в чем его суть. Вот примеры с...

Создание объекта из другого объекта
Добрый день. Теорию знаю плохо, но работаю над этим. У меня есть класс Компания и есть класс Сотрудник. Каким образом я могу в...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
40
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Идентификация объектов на Box2D v3 - использование userData и событий коллизий
8Observer8 02.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-collision-events-sdl3-c. zip https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11680&d=1772460536 Одним из. . .
Реалии
Hrethgir 01.03.2026
Нет, я не закончил до сих пор симулятор. Эта задача сложнее. Не получилось уйти в плавсостав, но оно и к лучшему, возможно. Точнее получалось - но сварщиком в палубную команду, а это значит, в моём. . .
Ритм жизни
kumehtar 27.02.2026
Иногда приходится жить в ритме, где дел становится всё больше, а вовлечения в происходящее — всё меньше. Плотный график не даёт вниманию закрепиться ни на одном событии. Утро начинается с быстрых,. . .
SDL3 для Web (WebAssembly): Сборка библиотек: SDL3, Box2D, FreeType, SDL3_ttf, SDL3_mixer и SDL3_image из исходников с помощью CMake и Emscripten
8Observer8 27.02.2026
Недавно вышла версия 3. 4. 2 библиотеки SDL3. На странице официальной релиза доступны исходники, готовые DLL (для x86, x64, arm64), а также библиотеки для разработки под Android, MinGW и Visual Studio. . . .
SDL3 для Web (WebAssembly): Реализация движения на Box2D v3 - трение и коллизии с повёрнутыми стенами
8Observer8 20.02.2026
Содержание блога Box2D позволяет легко создать главного героя, который не проходит сквозь стены и перемещается с заданным трением о препятствия, которые можно располагать под углом, как верхнее. . .
Конвертировать закладки radiotray-ng в m3u-плейлист
damix 19.02.2026
Это можно сделать скриптом для PowerShell. Использование . \СonvertRadiotrayToM3U. ps1 <path_to_bookmarks. json> Рядом с файлом bookmarks. json появится файл bookmarks. m3u с результатом. # Check if. . .
Семь CDC на одном интерфейсе: 5 U[S]ARTов, 1 CAN и 1 SSI
Eddy_Em 18.02.2026
Постепенно допиливаю свою "многоинтерфейсную плату". Выглядит вот так: https:/ / www. cyberforum. ru/ blog_attachment. php?attachmentid=11617&stc=1&d=1771445347 Основана на STM32F303RBT6. На борту пять. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru