Передать объект потребителю и вернуть объект - PullRequest
0 голосов
/ 21 сентября 2019

У меня есть довольно много мест, где мне нужно получить объект, выполнить некоторые побочные эффекты в зависимости от состояния этого объекта, а затем, наконец, вернуть объект.Для конкретного класса Foo я могу написать метод

public Foo perform(Consumer<Foo> sideEffect) {
    sideEffect.accept(this);
    return this;
}

Достаточно простой, но я бы не хотел переписывать его для каждого класса, а также хотел бы, чтобы он работал для классов, которыене моиЯ не могу добавить этот метод в Object, и я бы предпочел не создавать подкласс Consumer, который возвращает аргумент.Есть ли лучший способ сделать это?

1 Ответ

4 голосов
/ 21 сентября 2019

Вы можете написать универсальный служебный метод, который принимает аргументы типа Consumer<? super T> и T и выполняет эту задачу.Обратите внимание, что здесь вы должны использовать дженерики уровня метода.Вот как это выглядит.

public static <T> T perform(Consumer<? super T> sideEffect, T obj) {
    sideEffect.accept(obj);
    return obj;
}
...