创建一个类的包装器以避免字节中的varargs

时间:2018-06-13 02:48:03

标签: java variadic-functions

spring数据redis总是需要byte []中的输入,所以我尝试创建一个包装类,所以我不需要每次都将String转换为字节。

但是现在我遇到了evalSHA方法的问题,因为它接受了varargs。

evalSha(byte[] scriptSha, ReturnType returnType, int numKeys, byte[]... keysAndArgs)

如何将字符串中的varargs转换为byte []中的varargs?

以下是我目前的代码:

public List<String> evalSHA(String script, int numKeys, String ... keys){
    List<String> result = null;
    RedisConnection redis = redisConnectionFactory.getConnection();
    byte[] scriptSHA = redis.get("SCRIPT:CALGROUPQUEUE".getBytes());

    if(scriptSHA==null || scriptSHA.length==0){
        logger.error("no such script");
        return null;
    }

    List<byte[]> keysInByte = vargsToList(keys);
    // what to do below?
    List<byte[]> resultBytes =  redis.evalSha  (scriptSHA, ReturnType.MULTI, ???); 

    if(resultBytes!=null && !resultBytes.isEmpty()){
        result = new ArrayList<>();
        //... to do later
    }
}

1 个答案:

答案 0 :(得分:1)

varargs只不过是一个数组,这意味着在你的情况下,它是一个2D字节数组。所以你可以做到以下几点:

List<byte[]> resultBytes =  redis.evalSha(scriptSHA, ReturnType.MULTI, keysInByte.toArray(new byte[][] {}));

这使用List的toArray方法将其转换为数组。为了简化这一点,您还可以使用vargsToArray()辅助方法,直接返回一个数组。