2015-04-03 3 views
1

Я пытаюсь создать объект внутри потока, но я не хочу определять другой конструктор для объекта; Я хотел бы использовать установщиков для размещения значений там, где это необходимо. Это возможно?Создание нового объекта внутри потока и использование сеттеров

pe.setExts(pDTO.getExts().stream().map(s->new P(arg1, arg2, ..., arg12)))...; 

Как вы можете видеть, у меня много аргументов, и некоторые из них требуют некоторой обработки. Я хочу избежать этой обработки, пока это не будет необходимо.

То, что я ищу, может быть что-то вроде этого (я не знаю, как написать функцию, я думаю, что анонимная функция будет здорово здесь):

pe.setExts(pDTO.getExts().stream().map(s->{ 
    P p = new P(); 
    s->setExt1(p.getExt1()); 
    ... 
    List<V> l = p.getExt12(); 
    List<X> finalL = null; 
    [processing list l, populating finalL] 
    s->setExt12(finalL); 
})); 

ответ

3

Вы не можете использовать конструктор этого нет.

Я предлагаю написать метод, который принимает переменную s и возвращает P. Что-то вроде:

public static P generatePfromS(S s) { 
    //convert S to P 
} 

, а затем вы можете просто сделать:

pe.setExts(pDTO.getExts().stream().map(YourClass::generatePFromS).collect(toList())); 
+0

Я думаю, что мои классы не должны знать друг о друге. Один из них - «P», а другой - объект передачи данных «PDTO». Выполняя свой путь, это означает создание третьего класса, который будет содержать этот метод преобразования. Другое дело, что я пытаюсь использовать этот поток внутри «PPDTOAdapter». Или я должен создать этот метод внутри адаптера и вызвать его оттуда? – tzortzik

+0

Основываясь на вашем решении, я дал себе ответ в своем предыдущем комментарии. Спасибо! – tzortzik

Смежные вопросы