powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Параллельное наследование
5 сообщений из 5, страница 1 из 1
Параллельное наследование
    #38418643
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
У меня есть 4 класса
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class QueryColumn {
    ...
}
public class QueryTable {
    public List<QueryColumn> columns = new LinkedList<QueryColumn>();    
    ...
}

public class PreparedQueryColumn extends QueryColumn {
    ....
}

public class PreparedQueryTable extends QueryTable{
    ...
}



По логике в PreparedQueryTable.columns могут содержаться только PreparedQueryColumn. Как это выразить в коде?

Так как сейчас никто не мешает мне сделать PreparedQueryTable.column.add(QueryColumn).
...
Рейтинг: 0 / 0
Параллельное наследование
    #38418647
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class QueryColumn {
}
public class QueryTable<T extends QueryColumn> {
    public List<T> columns = new LinkedList<T>();    
}

public class PreparedQueryColumn extends QueryColumn{
}

public class PreparedQueryTable extends QueryTable<PreparedQueryColumn >{
}
...
Рейтинг: 0 / 0
Параллельное наследование
    #38418669
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо. в вашем случае есть небольшой минус. Можно создать такую конструкцию
QueryTable<PreparedQuerColumn> этого не должно быть. Я признаю, что это не указал в условиях. :)

Поэтому я сделал немного по другому.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class BaseTable<T> {
    List<T> columns = new LinkedList<T>();
}
public class QueryTable extends BaseTable<QueryColumn> {
    ...
}

public class PreparedQueryTable extends BaseTable<PreparedQueryColumn>{
    ...
}



Хотя пришлось создать лишний класс.
...
Рейтинг: 0 / 0
Параллельное наследование
    #38419688
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
В продолжении темы. для QueryColumn и PreparedQueryColumn создал базовый класс BaseQueryColumn (в них тоже нужно было использовать generics). Для таблиц схема стала теперь такая.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
public class BaseTable<T extends BaseQueryColumn> {
    List<T> columns = new LinkedList<T>();
}
public class QueryTable extends BaseTable<QueryColumn> {
    ...
}

public class PreparedQueryTable extends BaseTable<PreparedQueryColumn>{
    ...
}



Однако у меня проблема при работе с BaseTable, не работает
Код: java
1.
2.
for (BaseQueryColumn queryColumn : baseTable.columns) {
...


ругается на то что baseTable.columns содержит Object, хотя я ему же указал что BaseTable<T extends BaseQueryColumn>. Что я делаю не так?
...
Рейтинг: 0 / 0
Параллельное наследование
    #38419723
olzhas
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Разобрался.
Нужно использовать маски.

Код: java
1.
2.
for (BaseQueryColumn<?> queryColumn : baseTable.columns) {
...
...
Рейтинг: 0 / 0
5 сообщений из 5, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Параллельное наследование
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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