使用Object去强转可变参数类型

在使用RedisTemplate删除哈希表键时遇到问题,由于将可变参数(Object)hKeys强转,导致哈希键被序列化为嵌套数组,从而无法匹配Redis中的真实键,造成删除失败。问题的关键在于Object到可变参数的转换使key变成了String数组对象。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用Object去强转可变参数类型

最近在使用redisTemplate去删除hash表中的某个键时,发现一直删除不了。对于redis中的key序列化 我使用的是 StringRedisSerializer 这个类。前置条件全部删除完毕,来看代码。

/**
  * 	这里是在redisTemplate的基础上再进行了一次封装
  * 	注意真正调用时的传参
  * 	delete(key, (Object) hKeys) 这里强转了可变参数类型
 */
 public static boolean deleteMapValue(final String key, final 	String... hKeys) {
        return redisTemplate.opsForHash().delete(key, (Object) hKeys) > 0;
 }

 /**
  * 这里是 redisTemplate中的 delete方法
  *  hashKeys 这个参数的数据结构变成了 一个嵌套数组
  *  Object[ 
  * 	String[
  * 	]
  *	 ]
  */
	public Long delete(K key, Object... hashKeys) {

		byte[] rawKey = rawKey(key);
		byte[][] rawHashKeys = rawHashKeys(hashKeys);

		return execute(connection -> connection.hDel(rawKey, rawHashKeys));
	}

/**
* 最后的序列化逻辑就相当于这样
*/
  @SneakyThrows
    public static byte[] getByteArray(Object key){
        ByteArrayOutputStream byteArrayOutputStream = new ByteArrayOutputStream(1024);
        ObjectOutputStream objectOutputStream = new ObjectOutputStream(byteArrayOutputStream);
        objectOutputStream.writeObject(key);
        objectOutputStream.flush();
        byte[] byteArray = byteArrayOutputStream.toByteArray();
        return byteArray;
    }

我在存储的时候 传参是一个String 即使使用 (Object)String 的写法其实也不会有太大影响。问题就出现在使用Object强转可变参数类型这里 变成嵌套数组之后 取出的 key 就变成了一个 String类型的数组对象 导致在redis中找不到键 然后删除失败。
每天上一当,当当不一样。!!!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值