Как указать последовательность ссылок на метод?JAVA

Программисты JAVA общаются здесь
Ответить
Anonymous
 Как указать последовательность ссылок на метод?

Сообщение Anonymous »

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

Код: Выделить всё

Long variable = Optional.of(message)
.map(Message::getPayload)
.map(MessageContentClass::getVariable)
.orElse(null);
Поскольку это повторялось много раз в базе кода, это меня очень раздражало. Мне уже удалось упростить это до такой функции:

Код: Выделить всё

public  T getVariableFromMessage(Message message, Function func) {
return Optional.of(message)
.map(Message::getPayload)
.map(func)
.orElse(null);
}
и это прекрасно работает. Однако есть также некоторые типы сообщений, в которых желаемая переменная вложена немного глубже в сообщение. Что-то вроде:

Код: Выделить всё

Long variable = Optional.of(message)
.map(Message::getPayload)
.map(MessageContentClass::getObject1)
.map(Object1::getObject2)
.map(Object2::getVariable)
.orElse(null);
Я даже не знаю, возможно ли это, но было бы неплохо сгенерировать первые функции, чтобы у меня был (вместо одной Function) массив функций, где каждая «указывает» на тип следующей, чтобы первая карта шла от K -> T, вторая от T -> R и так далее, пока не дойдет до финальной. Я видел объявления методов, где общий тип вводится ВНЕ угловых скобок, так что, возможно, что-то в этом роде? Также ясно, что то, что я ищу, будет работать для любого количества функций. Если бы мне нужно было только два или три, я мог бы просто привести их по отдельности в качестве аргументов.
Надеюсь, мне понятно, что я пытаюсь сделать, и спасибо, что прочитали весь пост :)

Подробнее здесь: https://stackoverflow.com/questions/790 ... e-sequence
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «JAVA»