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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> clone(), Не могу вызвать метод clone() 
V
    Опции темы
Granje
Дата 28.7.2012, 23:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



Здравствуйте. Я новичок в Java. Подскажите почему в этом коде возникает ошибка "clone() has protected access in Object"

Код

public class EqualsTest implements Cloneable {
    
    public static void main(String[] args) {
        
        Object test = "Hey!";
        
        System.out.println(test.clone().equals(test));
    }
    
}


Как я понимаю EqualsTest наследник Object, значит он наследует метод clone(). Ведь даже в описании clone() в API есть такой пример "x.clone().equals(x)
 will be true". В теории должно работать, но не работает.
PM MAIL   Вверх
Stolzen
Дата 28.7.2012, 23:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1041
Регистрация: 17.10.2005

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



Должно быть
Код

EqualsTest test = new EqualsTest("Hey!");


И, плюс к этому, нужен правильно переопределенный метод equals

Это сообщение отредактировал(а) Stolzen - 29.7.2012, 11:11


--------------------
datatalks.ru - анализ данных, статистика, машинное обучение
PM MAIL WWW   Вверх
Granje
Дата 29.7.2012, 09:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



На самом деле я немного затупил. Класс должен называться CloneTest. То есть интересует почему возникает ошибка доступа к методу clone(). Ведь, как я понял, доступ protected это видимость или в том же пакете, или в подклассах. Допуститим полное имя моего класса com.my.test.CloneTest и он же является подклассом Object. И должно работать...

Цитата

Должно быть
Код

EqualsTest test = "Hey!";



Это констуктор писать... Я что не могу клонировать обьект типа Object? И вообще это писалось чтобы руками попробовать метод clone(), и не должно было быть никаких сложностей. 
PM MAIL   Вверх
dorogoyIV
Дата 29.7.2012, 10:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



в исходник загляни...
метод clone() пустой и к тому же protected
он зарезервирован, и ты должен его сам переопределить...
для некоторых объектов он определен - например календарь...
PM MAIL   Вверх
Granje
Дата 29.7.2012, 10:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



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

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



ага, всему виной "ця бусурманська мова", вернее ее не знание). в доках выражение  "x.clone().equals(x) will be true" это рекомендация к реализации. Я подумал что он уже реализован и в нем оно уже определено). 

Всем спасибо! Пойду дальше грызть гранит Java smile 
PM MAIL   Вверх
priam220
Дата 30.7.2012, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Цитата(dorogoyIV @  29.7.2012,  10:30 Найти цитируемый пост)
метод clone() пустой и к тому же protected

он не пустой, он native. Его можно не переопределять, если устраивает зона видимости и поверхностное клонирование объекта.
PM MAIL   Вверх
dorogoyIV
Дата 30.7.2012, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1503
Регистрация: 26.3.2007

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



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

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

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


 




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


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

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