Как сделать RedisOperations<String, List<Subscription>> вместо <K, V>?

Я пытаюсь предотвратить состояние гонки в Redis, используя пессимистическую блокировку.

Вот что я сделал до сих пор:

@Override
public void put(final Subscription subscription) {
    final String username = subscription.getUsername();
    redisTemplate.execute(new SessionCallback<List<Subscription>>() {
        @Override 
        public <K, V> List<Subscription> execute(RedisOperations<K, V> ops) { 
            ops.multi();
            ops.watch((K) SUBSCRIPTION);
            final List<Subscription> list = (List<Subscription>) ops.opsForHash().get((K) SUBSCRIPTION, username);
            final List<Subscription> updated = orEmpty(list);
            updated.removeIf(s -> s.getId().equals(generateId(username, subscription.getTargetUsername())));
            updated.add(subscription);
            ops.opsForHash().put((K) SUBSCRIPTION,  username, updated);
            ops.exec();
            return updated;
        }
    }); 
}

Этот фрагмент кода выглядит ужасно и содержит множество предупреждений.

Я хотел бы переписать его в лямбде или хотя бы обобщить.

Как я могу сделать RedisOperations> вместо ?

Если он работает правильно, то Code Review, как правило, лучше SE.

chrylis -cautiouslyoptimistic- 08.02.2019 02:12

я думаю, вы не можете написать лямбда-выражение для SessionCallback, потому что метод execute имеет общие параметры

Deadpool 08.02.2019 02:21

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

Naman 08.02.2019 05:05

я изменил свой вопрос

Pasha 08.02.2019 11:10
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
Как вычислять биты и понимать побитовые операторы в Java - объяснение с примерами
В компьютерном программировании биты играют важнейшую роль в представлении и манипулировании данными на двоичном уровне. Побитовые операции...
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Поднятие тревоги для долго выполняющихся методов в Spring Boot
Приходилось ли вам сталкиваться с требованиями, в которых вас могли попросить поднять тревогу или выдать ошибку, когда метод Java занимает больше...
Полный курс Java для разработчиков веб-сайтов и приложений
Полный курс Java для разработчиков веб-сайтов и приложений
Получите сертификат Java Web и Application Developer, используя наш курс.
0
4
142
0

Другие вопросы по теме