You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Java中List<byte[]>转byte[][]及Jedis hMGet调用报错解决

解决Jedis hMGet可变参数调用的语法问题

嘿,这个问题其实就是个Java数组初始化的小坑,我之前用Jedis的时候也踩过~

你之前的写法new byte[][fields.size()]语法是错误的,原因是Java里二维数组的初始化规则:当你要指定外层数组的长度时,应该把长度放在第一个方括号里,内层方括号留空,也就是new byte[fields.size()][]

正确的调用方式

有两种简洁的写法都可以解决这个问题:

方式1:显式指定数组长度

先把List转成正确的byte[][],再传入方法:

// 假设你的key字符串和fields列表已经定义好
String key = "your-target-key";
List<byte[]> fields = Arrays.asList("field1".getBytes(), "field2".getBytes());

byte[] keyBytes = key.getBytes();
// 这里是关键:正确初始化二维数组
byte[][] fieldsArray = fields.toArray(new byte[fields.size()][]);

// 调用hMGet方法
List<byte[]> result = jedis.hMGet(keyBytes, fieldsArray);

方式2:更简洁的自动适配写法

Java的List.toArray()方法支持传入一个空数组,它会自动根据List的大小创建对应长度的数组,这种写法更省事:

// 直接在方法参数里转换
List<byte[]> result = jedis.hMGet(key.getBytes(), fields.toArray(new byte[0][]));

为什么这样可行?

Jedis的hMGet(byte[] key, byte[]... fields)里的可变参数byte[]...,在Java编译后本质就是byte[][]类型,所以只要把List<byte[]>正确转换成byte[][],就能符合方法的参数要求啦。

内容的提问来源于stack exchange,提问作者LeoZhang

火山引擎 最新活动