Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Передать метод в качестве параметра в другой метод  [new]
Zzz79
Member

Откуда:
Сообщений: 168
В нашем проекте сейчас расширение- и местами очень много дубляжа

вот в одной из моих тасок есть часть,которая касается двух классов ,в которых по сути один и тот же метод,но работает с разными ДТО

(сами эти дто с собой не связаны никаким интерфейсом)- это косяк смежников

вообщем нужно понять можно ли мне такое осуществить

дто первое
public class EmployeeDto


дто номер два
public class EmployeeDto2


дто номер 3
public class updateEmloyeeDtoRequest implements Message{
List<EmployeeDto> records;
.....


дто номер 4

дто номер 3
public class updateEmloyeeDto2Reques implements Messsage{
List<EmployeeDto2> records;
.....


Message - наш интерфейс маркер


далее вот этот метод который я должен передать в качестве параметра в другой метод,он как вы понимаете для двух классов разный


private updateEmployeeDtoRequest(List<EmployeeDto>records)
return new UpdateEmployeeDto()
.records(records)

соответсвенно в другом классе этот метод такой же тока возвращает UpdateEmployee2Dto и принимает лист Employee2Dto


а вот это сам метод который я должен сделать общим для этих двух классов

private void processRecords(List<EmployeeDto>records){
CombletableFuture.completableFutere(records).
thenApply(x->updateEmployeeDto(x)
.thenCompose(this::sendMesaage)

и тд


получается ятобы сделать общий метод для двух классов во первыз должен быть дженерик List в качестве аргумента я так понимаю в этом методе и в методе updateEmployeeDto и в этот метод надо как то передать updateEmployeeDto() метод как параметр
27 апр 20, 19:30    [22123731]     Ответить | Цитировать Сообщить модератору
 Re: Передать метод в качестве параметра в другой метод  [new]
mad_nazgul
Member

Откуда:
Сообщений: 5288
Zzz79,
Вам нужны лямбды :-)
28 апр 20, 06:23    [22123940]     Ответить | Цитировать Сообщить модератору
 Re: Передать метод в качестве параметра в другой метод  [new]
betelgeizex
Member

Откуда:
Сообщений: 98
Zzz79,

Что-то типа такого:

    private <T, R> void processRecords(List<T> records, Function<List<T>, R> updateMethod) {
        // something
    }

...

    processRecords(employeeDtoList, this::updateEmployeeDtoRequest);
28 апр 20, 06:38    [22123941]     Ответить | Цитировать Сообщить модератору
 Re: Передать метод в качестве параметра в другой метод  [new]
Zzz79
Member

Откуда:
Сообщений: 168
betelgeizex
Zzz79,

Что-то типа такого:

    private <T, R> void processRecords(List<T> records, Function<List<T>, R> updateMethod) {
        // something
    }

...

    processRecords(employeeDtoList, this::updateEmployeeDtoRequest);

спасибо ,а как это же будет выглядеть если updateEmployeeDtoRequest принимает не только List<T> в качестве аргумента а еще два параметра
тоесть сейчас у меня это вот так выглядит

private updateEmployeeDtoRequest(List<EmployeeDto>records,UUID transactionId, boolean lastChunk)
return new UpdateEmployeeDto()
.records(records)
.transactionId(transationId)
.lastChunk(lastCunk)


и эти же три параметра приходят мне в

void processRecords(List<T> records,UUID uuid,boolean b)
28 апр 20, 09:34    [22123986]     Ответить | Цитировать Сообщить модератору
 Re: Передать метод в качестве параметра в другой метод  [new]
betelgeizex
Member

Откуда:
Сообщений: 98
Zzz79
betelgeizex
Zzz79,

Что-то типа такого:

    private <T, R> void processRecords(List<T> records, Function<List<T>, R> updateMethod) {
        // something
    }

...

    processRecords(employeeDtoList, this::updateEmployeeDtoRequest);

спасибо ,а как это же будет выглядеть если updateEmployeeDtoRequest принимает не только List<T> в качестве аргумента а еще два параметра
тоесть сейчас у меня это вот так выглядит

private updateEmployeeDtoRequest(List<EmployeeDto>records,UUID transactionId, boolean lastChunk)
return new UpdateEmployeeDto()
.records(records)
.transactionId(transationId)
.lastChunk(lastCunk)


и эти же три параметра приходят мне в

void processRecords(List<T> records,UUID uuid,boolean b)


Например, подключить стороннюю библиотеку, типа https://www.vavr.io , где есть Function3, и в нее передавать ссылку на updateEmployeeDtoRequest.

Или обернуть все параметры updateEmployeeDtoRequest в новый (параметризованный) класс с четырьмя полями по количеству аргументов - это проще даже.
28 апр 20, 18:07    [22124363]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить