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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Generics, Создание объекта типа T 
V
    Опции темы
Madonna
Дата 17.5.2009, 12:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



Добрый день!
Код

_currunt=(T) new Object();

Как создать новый объект типа <T>?
Eclipse подчеркивает желтым и говорит Unchecked cast from Object to T.
--------------------
Best regards, Madonna
PM   Вверх
ivg
Дата 17.5.2009, 13:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Autonomous R&D
**


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

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



Generics типы проверяются во время компиляции. Информация об этих типах, в общем случае, в рантайме отсутствует. Чтобы создать объект, нужно в рантайме иметь информацию о типе(классе). Самый простой способ - явно указывать класс, объект которого хотим получить
Код

    public <T> T create(Class<T> clazz) {
        return clazz.newInstance();
    }

Цитата(Madonna @  17.5.2009,  14:33 Найти цитируемый пост)
Eclipse подчеркивает желтым и говорит Unchecked cast from Object to T. 

В рантайме получите ClassCastException.

Это сообщение отредактировал(а) ivg - 17.5.2009, 13:11
PM MAIL   Вверх
Madonna
Дата 17.5.2009, 14:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



И ещё вопрос...
Как в ява реализуются аналоги ref out (C#)? 
--------------------
Best regards, Madonna
PM   Вверх
Старовъръ
Дата 17.5.2009, 14:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



В Жава все передается по ссылкам.
PM MAIL WWW   Вверх
Madonna
Дата 17.5.2009, 19:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



Кроме реализации интерфейса clone(), можно ещё как-нибудь скопировать объект со всеми полями?

Добавлено через 29 секунд
типа <T>
--------------------
Best regards, Madonna
PM   Вверх
LSD
Дата 17.5.2009, 19:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(ivg @  17.5.2009,  13:00 Найти цитируемый пост)
В рантайме получите ClassCastException.

Зависит от типа _currunt, если он Object или T, то ничего не будет.



Цитата(Madonna @  17.5.2009,  19:33 Найти цитируемый пост)
Кроме реализации интерфейса clone(), можно ещё как-нибудь скопировать объект со всеми полями?

Сериализация, рефлексия.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Madonna
Дата 17.5.2009, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



Цитата(LSD @  17.5.2009,  17:39 Найти цитируемый пост)
Сериализация, рефлексия. 

Что проще?
Я так понимаю сериализация?

Или проще определить Clone()?  smile 
Как в большинстве случаев в Java решается проблема копирования объектов, (особенно если они обобщенные, состоят из композиций т.е. поля тоже объекты) ?

Даже ref нет. У меня везде переприсвоение ссылок. Как так можно жить? Никак не могу понять философию Явы. 

Это сообщение отредактировал(а) Madonna - 17.5.2009, 23:57
--------------------
Best regards, Madonna
PM   Вверх
Madonna
Дата 18.5.2009, 00:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



Цитата(ivg @  17.5.2009,  11:00 Найти цитируемый пост)

   
Код

 public <T> T create(Class<T> clazz) {
        return clazz.newInstance();
    }

Объясните пожалуйста эту конструкцию, у меня оно не работает, без исключений. Оо.
>... если клонировать объект, то все ссылки на другие объекты, которые он содержит, останутся теми же самыми? Иначе говоря, >инкапсулированные объекты не клонируются.
Чего-то я в этой жизни не понимаю.  smile  
В Java считается хорошим тоном реализовывать метод Clone?
При сериализации объект копируется со всеми взаимосвязями?
Можно ли создать, допустим внутренний, класс который будет реализовывать интерфейс Cloneable<T>
если поля не объекты?

И ещё один вопрос. Про интерфейсы, как осуществляется доступ через интерфейс к методом класса, скрывая поля (я так понимаю поля private)? Как интерфейсы помогают скрыть реализацию?


ЗЫ Спасибо за внимание. 


Это сообщение отредактировал(а) Madonna - 18.5.2009, 01:35
--------------------
Best regards, Madonna
PM   Вверх
LSD
Дата 18.5.2009, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

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



Цитата(Madonna @  17.5.2009,  23:45 Найти цитируемый пост)
Что проще?
Я так понимаю сериализация?

По соотношению скорость+потребление памяти лучшие результаты даст clone(), затем идет рефлексия, затем сериализация.

По простоте реализации на первом месте сериализация, потом идет clone().

Преимущество рефлексии состоит в том, что она требует только наличия конструктора без аргументов (модификации классов не требуется).



Цитата(Madonna @  18.5.2009,  00:20 Найти цитируемый пост)
В Java считается хорошим тоном реализовывать метод Clone?

Нет, clone() реализуется если в нем есть необходимость.


Цитата(Madonna @  18.5.2009,  00:20 Найти цитируемый пост)
При сериализации объект копируется со всеми взаимосвязями?

Да и в это есть еще одна проблема, все связанные объекты должны быть сериализуемы.


Цитата(Madonna @  18.5.2009,  00:20 Найти цитируемый пост)
Можно ли создать, допустим внутренний, класс который будет реализовывать интерфейс Cloneable<T>
если поля не объекты?

Не вижу никаких проблем с внутренним классом, независимо от типа его полей.



Цитата(Madonna @  18.5.2009,  00:20 Найти цитируемый пост)
И ещё один вопрос. Про интерфейсы, как осуществляется доступ через интерфейс к методом класса, скрывая поля (я так понимаю поля private)? Как интерфейсы помогают скрыть реализацию?

Это уже не имеет отношения непосредственно к Java, это уже из области концепций ООП.
Цитата
Интерфейс (от лат. inter — между и лат. face — поверхность) — это семантическая и синтаксическая конструкция в коде программы, используемая для специфицирования услуг, предоставляемых классом или компонентом. Интерфейс определяет границу взаимодействия между классами или компонентами, специфицируя определенную абстракцию, которую осуществляет реализующая сторона. В отличие от многих других видов интерфейсов, интерфейс в ООП является строго формализованным элементом объектно-ориентированного языка и, в качестве семантической конструкции, широко используется кодом программы.

Интерфейс (объектно-ориентированное программирование)

Добавлено через 29 секунд
Цитата(Madonna @  18.5.2009,  00:20 Найти цитируемый пост)
Объясните пожалуйста эту конструкцию, у меня оно не работает, без исключений.

Что за ошибка?


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Madonna
Дата 19.5.2009, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Forbidden love...
*


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

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



LSD, спасибо за развернутый ответ.  smile  

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

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

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


 




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


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

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