powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Java wildcards создать список в зависимости от типа входного списка
6 сообщений из 6, страница 1 из 1
Java wildcards создать список в зависимости от типа входного списка
    #38427846
recvezitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Тяжело адекватно сформулировать название. Суть такая. На входе есть список типа ? extends Entity1, на выход надо сделать список типа ? extends Entity2. Entity1 и Entity2 не имеют никакого родства, нужно ставить ифы и чекать сущность на входе и в зависимости от нее создавать соответсвующую сущность на выходе.
На входе:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
public class PaymentResult {

    public String refNum;

  public   List<? extends HistoryEntry> list;

    public List<? extends HistoryEntry> getList() {
        return list;
    }

    public void setList(List<? extends HistoryEntry> list) {
        this.list = list;
    }

}



на выходе:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class HubResult {

    public String refNum;

    private List<? extends Number> list;

    public List<? extends Number> getList() {
        return list;
    }

    public void setList(List<? extends Number> list) {
        this.list = list;
    }
}



нужна функция которая заполняет список в хабе данными из пейментрезалта. Сделал очень както стремно, наверняка как то поизящней можно:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
public List fillUpData(PaymentResult paymentResult) {
        List<? extends HistoryEntry> list = paymentResult.getList();
        List<? extends Number> result = null;// = new ArrayList();

        if (list != null && list.size() > 0) {
            if (list.get(0) instanceof HistoryEntryIDT) {
                result = fillUpHubStatementIDTEntry(list);
            } else if (list.get(0) instanceof HistoryEntryFDPS) {
                result = fillUpHubStatementFDPSEntry(list);
            } else {
                result = fillUpHubStatementEntry(list);
            }
        }
        return result;
    }

    private List<Integer> fillUpHubStatementIDTEntry(List<? extends HistoryEntry> paymentResult) {
        List<Integer> resultList = new ArrayList<Integer>();
        int i = 0;
        for (HistoryEntry entry1 : paymentResult) {
            HistoryEntryIDT entry = (HistoryEntryIDT) entry1;
            Integer item = new Integer(entry.hashCode());
            resultList.add(item);
        }
        return resultList;
    }

    private List<Double> fillUpHubStatementFDPSEntry(List<? extends HistoryEntry> paymentResult) {
        List<Double> resultList = new ArrayList<Double>();
        int i = 0;
        for (HistoryEntry entry1 : paymentResult) {
            HistoryEntryFDPS entry = (HistoryEntryFDPS) entry1;
            Double item = new Double(entry.hashCode());
            resultList.add(item);
        }
        return resultList;
    }

    private List<Float> fillUpHubStatementEntry(List<? extends HistoryEntry> paymentResult) {
        List<Float> resultList = new ArrayList<Float>();
        int i = 0;
        for (HistoryEntry entry1 : paymentResult) {
            HistoryEntry entry = (HistoryEntry) entry1;
            Float item = new Float(entry.hashCode());
            resultList.add(item);
        }
        return resultList;
    }
...
Рейтинг: 0 / 0
Java wildcards создать список в зависимости от типа входного списка
    #38428058
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recvezitor,

Воспользуйтесь возможностями Generic'ов:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
@SuppressWarnings("unchecked")
private <T> List<T> fillUpHubStatement(List<? extends HistoryEntry> paymentResult) {
    List<T> resultList = new ArrayList<T>();
    for (HistoryEntry entry1 : paymentResult) {
    	...
    	resultList.add((T)(Object)entry1.hashCode());
    }
    return resultList;
}
...
instance.<Integer>fillUpHubStatement(...);
instance.<Float>fillUpHubStatement(...);
instance.<Double>fillUpHubStatement(...);
...
Рейтинг: 0 / 0
Java wildcards создать список в зависимости от типа входного списка
    #38428210
recvezitor
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Usman,

тогда в методе я не смогу использовать специфичные для сущности методы.
И еще меня сущает способ проверки

Код: java
1.
if (list.get(0) instanceof HistoryEntryIDT) {



порнуха какая-то
...
Рейтинг: 0 / 0
Java wildcards создать список в зависимости от типа входного списка
    #38428870
jdroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
recvezitorСделал очень както стремно, наверняка как то поизящней можно:

для каждого входного типа создается класс конвертор реализующие необходимое преобразование.
вес классы конверторы реализуют общий интерфейс.
дальше IoC контейнер, фабрика или просто мапа которая по типу входного объекта возвращает интерфейс нужного конвертоа.

в цикле:
по типу входного объекта получаем интерфейс конвертора
у интерфейса вызываем функцию преобразования и передаем ей входной объект в качестве аргумента
результат работы конвертора сохраняем в выходной список.

как-то так
...
Рейтинг: 0 / 0
Java wildcards создать список в зависимости от типа входного списка
    #38428914
jdroid
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еще как вариант можно реализовать нужные преобразования как методы HistoryEntry и его наследников если это позволит обойтись без конвертации списков, и оправдано только для простых типов.
решение более костлявое, потому как при добавлении новых преобразований придется править HistoryEntry и его наследников и вдобавок можно зацепить паровоз зависимостей.
...
Рейтинг: 0 / 0
Java wildcards создать список в зависимости от типа входного списка
    #38429245
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
recvezitorИ еще меня сущает способ проверкиЧастое использование instanceof в коде говорит о том, что приложение неправильно спроектировано.
Воспользуйтесь возможностями ООП (полиморфизм).
И прислушайтесь к мнению jdroid'а.
...
Рейтинг: 0 / 0
6 сообщений из 6, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Java wildcards создать список в зависимости от типа входного списка
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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