Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / генерики в цикле / 7 сообщений из 7, страница 1 из 1
06.03.2015, 07:55
    #38896775
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
Есть класс и методы для работы с этим классом.

Код: java
1.
2.
3.
4.
5.
6.
7.
class Column<T> {
...
}


public <T> T getStringToObject(Column<T> column, String value);
public <T> void set(Column<T>, T value);



Я могу написать
Код: java
1.
set(new Columnt<Integer>,getStringToObject(column,"10"))


здесь все хорошо и генерики выполняют свою работу.

теперь стоит задача выполнить данную операцию в цикле

Код: java
1.
2.
3.
for (Column column : columns) {
  set(column,getStringToObject(column,valueMap.get(column.columnName)); // здесь ошибка компиляции
}


можно решить проблему дополниетльным методом

Код: java
1.
2.
3.
4.
5.
6.
7.
for (Column column : columns) {
  set2(column,valueMap.get(column.columnName)); 
}

public <T> void set2(Column<T> column,String value) {
  set(column,getStringToObject(column,value);
}



можно как нибудь обойтись без 2-го метода?
...
Рейтинг: 0 / 0
06.03.2015, 10:05
    #38896876
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
Циклы тут не при чем вообще. Вы для переменной columns где-то просрали тип генерика. Если бы вы читали ошибки компилятора или предупреждения от IDE, то знали бы это.
...
Рейтинг: 0 / 0
06.03.2015, 10:35
    #38896908
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
Blazkowicz,
Код: java
1.
List<Column> columns = new LinkedList<Column>();



вот что прописано для columns.

что вы предлагаете прописать в виде генерика?
...
Рейтинг: 0 / 0
06.03.2015, 11:20
    #38896962
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
olzhas,

Конкретный тип
Код: java
1.
List<Column<String>> columns = new LinkedList<>();


Или wildcard
Код: java
1.
List<Column<?>> columns = new LinkedList<>();


Или генерик, если он есть в контексте
Код: java
1.
List<Column<T>> columns = new LinkedList<>();



Мы же не знаем что у вас там.
...
Рейтинг: 0 / 0
06.03.2015, 11:27
    #38896970
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
Хотя, если у вас columns - гетерогенная коллекция, то ни о каком контроле типов значений речи быть не может, ведь все типы разные. Поэтому хорошо бы понять для чего именно эти методы написаны, так как указанный код не предназначен для решения проблемы установки значений в цикле.
...
Рейтинг: 0 / 0
06.03.2015, 11:49
    #38896994
olzhas
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
Blazkowicz,

Да у меня в columns хранятся разные типы. Поэтому я использую List<Column>.

Ко мне приходит Map<String,String> где ключ - это название колонки, а значение - значение колонки.
функция getStringToObject конвертирует строку в объект в зависимости от типа колонки.
функция set устанавливает это значение.

при использования цикла я не могу использовать генерики, так как колонки разные, но я могу вызвать функцию set2 с проверкой соответствия типов и она нормально скомпилируется.

хотелось бы избавиться этот этой второй функции. Хотя боюсь это не возможно сделать.
...
Рейтинг: 0 / 0
07.03.2015, 01:11
    #38897744
Dmitry Eliseev
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
генерики в цикле
olzhas,

Код: java
1.
2.
3.
for (Column<?> column : columns) {
  set(column,getStringToObject(column,valueMap.get(column.columnName));
}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / генерики в цикле / 7 сообщений из 7, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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