Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Generics на уровне классов и возможны ли излишества / 5 сообщений из 5, страница 1 из 1
27.01.2012, 13:24:18
    #37634906
Stern
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generics на уровне классов и возможны ли излишества
Добрый день,

Я недавно вернулся на один проект и был удивлен увидев там изменения на уровне моделей (для БД). Данные измения относятся ко всеобщему использованию generics на уровне классов. Иерархию классов можно найти во вложенном файле. Вообщем раньше generics использовались на уровне методов и народ как то боролся за простоту и понятность кода.

Было:
Код: java
1.
public abstract class JPARecord implements HasKey, Serializable {/*...*/}


Стало:
Код: java
1.
public abstract class JPARecord<T extends JPARecord> implements HasKey, Serializable {/*...*/}




Было:
Код: java
1.
public abstract class JPAModel extends JPARecord {/*...*/}


Стало:
Код: java
1.
public abstract class JPAModel<T extends JPAModel> extends JPARecord<T> {/*...*/}



Было:
Код: java
1.
public <T extends JPARecord> T persist() {/*...*/}


Стало:
Код: java
1.
public T persist() {/*...*/}



Было:
Код: java
1.
public abstract class Resource extends Content implements Activity {/*...*/}


Стало:
Код: java
1.
public abstract class Resource<T extends Resource> extends Content<T> implements Activity {/*...*/}



Было:
Код: java
1.
List<Resource> resources = resourceService.findResourceEntriesForWorkSpace() {/*...*/}


Стало:
Код: java
1.
List<Resource<?>> resources = resourceService.findResourceEntriesForWorkSpace() {/*...*/}



Было:
Код: java
1.
public class BinaryDocument extends Resource {/*...*/}


Стало:
Код: java
1.
public class BinaryDocument extends Resource<BinaryDocument> {/*...*/}



Основная аргументация таких изменений - типа раньше многое было дозволенно а теперь нам компилятор помогает не получить контакты вместо ресурсов. Для меня это звучит как паранойя. Да и сам рефакторинг не упростил а усложнил существующий код. Человек который этим занимался сказал что такой стиль называется type propagation (когда при объявлении класса потомка, классу родителю в дженерик тип передается тип класс потомка). Кто-нибудь что-нибудь знает про данный подход, и насколько он актуален ? Так же я нахожу неудачным тот факт что теперь использование всех абстрактных классов в коде должно сопровождаться wildcard'ом типа Resource<?> resource = ... . Поделитесь вашим мнением по поводу увиденного и подкрепите ваши доводы, best practic'ами, подходами итд. Заранее вам благодарен .
...
Рейтинг: 0 / 0
27.01.2012, 13:42:59
    #37634948
Miha_S7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generics на уровне классов и возможны ли излишества
Sternкогда при объявлении класса потомка, классу родителю в дженерик тип передается тип класс потомка
когда при объявлении класса родителя, в дженерик тип передается тип класса потомка


а делегирование активно используется?
...
Рейтинг: 0 / 0
27.01.2012, 13:46:50
    #37634957
Stern
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generics на уровне классов и возможны ли излишества
Miha_S7,

Есть класс мною созданный JPADelegate в перспективе что народ будет успешно это дело развивать и писать делегаты выше, но народ плюнул на это дело. Если развивать вашу идею то вы предлогаете что бы каждый класс модели имел свой собственный делегат заточенный именно под его тип ?
...
Рейтинг: 0 / 0
27.01.2012, 13:51:32
    #37634973
Miha_S7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generics на уровне классов и возможны ли излишества
Stern,

ну да, примерно так. Но, имхо, это имеет смысл только если нужно использовать какие-то методами делегата, которые не входят в список методов делегирующего класса. Я с такой методологией не сталкивался. Просто данное применение - первое, что пришло в голову, больше навскидку идей нет.
...
Рейтинг: 0 / 0
27.01.2012, 16:08:37
    #37635296
Miha_S7
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Generics на уровне классов и возможны ли излишества
Хотя вот тут подобная техника используется для построения иерархии
Ctrl+F, "Declare the child list as a List<N> and add the this object in the subclass constructor"
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Generics на уровне классов и возможны ли излишества / 5 сообщений из 5, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]