日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

DefaultHashOperations multiget的一个坑

發布時間:2025/5/22 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 DefaultHashOperations multiget的一个坑 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

?

DefaultHashOperations的multiget如果沒有數據會返回java.util.Collections.EmptyList,這個List沒有重寫add方法。

?

List<Long> resultIds=redisTemplate.boundHashOps(“key”).multiGet(ids)

?

resultIds在add一個新元素時,報了一下的錯: java.lang.UnsupportedOperationExceptionat java.util.AbstractList.add(AbstractList.java:148)at java.util.AbstractList.add(AbstractList.java:108)

?

原因:

org.springframework.data.redis.core.RedisTemplate#boundHashOps

public List<HV> multiGet(Collection<HK> hashKeys) {return ops.multiGet(getKey(), hashKeys);}

org.springframework.data.redis.core.DefaultHashOperations#multiGet

public List<HV> multiGet(K key, Collection<HK> fields) {if (fields.isEmpty()) {return Collections.emptyList();//這個list是java.util.Collections#emptyList中的java.util.Collections.EmptyList}final byte[] rawKey = rawKey(key);final byte[][] rawHashKeys = new byte[fields.size()][];int counter = 0;for (HK hashKey : fields) {rawHashKeys[counter++] = rawHashKey(hashKey);}List<byte[]> rawValues = execute(new RedisCallback<List<byte[]>>() {public List<byte[]> doInRedis(RedisConnection connection) {return connection.hMGet(rawKey, rawHashKeys);}}, true);return deserializeHashValues(rawValues);}

?

這個java.util.Collections.EmptyList沒有重寫add方法:

private static class EmptyList<E>extends AbstractList<E>implements RandomAccess, Serializable {private static final long serialVersionUID = 8842843931221139166L;public Iterator<E> iterator() {return emptyIterator();}public ListIterator<E> listIterator() {return emptyListIterator();}public int size() {return 0;}public boolean isEmpty() {return true;}public boolean contains(Object obj) {return false;}public boolean containsAll(Collection<?> c) { return c.isEmpty(); }public Object[] toArray() { return new Object[0]; }public <T> T[] toArray(T[] a) {if (a.length > 0)a[0] = null;return a;}public E get(int index) {throw new IndexOutOfBoundsException("Index: "+index);}public boolean equals(Object o) {return (o instanceof List) && ((List<?>)o).isEmpty();}public int hashCode() { return 1; }@Overridepublic boolean removeIf(Predicate<? super E> filter) {Objects.requireNonNull(filter);return false;}@Overridepublic void replaceAll(UnaryOperator<E> operator) {Objects.requireNonNull(operator);}@Overridepublic void sort(Comparator<? super E> c) {}// Override default methods in Collection @Overridepublic void forEach(Consumer<? super E> action) {Objects.requireNonNull(action);}@Overridepublic Spliterator<E> spliterator() { return Spliterators.emptySpliterator(); }// Preserves singleton propertyprivate Object readResolve() {return EMPTY_LIST;}}

?

總結

以上是生活随笔為你收集整理的DefaultHashOperations multiget的一个坑的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。