将变量参数列表转换为字节数组

时间:2014-10-01 06:50:27

标签: java arrays casting

我得到了一个带有变量参数列表的函数。根据类型说明符,所有其他参数具有不同的含义。在具体情况下,除第一个参数外,所有参数都包含字节数组。我想将它们转换为二维字节数组:

function foo(byte type,Object ...parameters) {
   ...
   switch(type) {
      case 1: short ID=(short) parameters[0];
              byte[][] payloads=(byte[][]) Arrays.copyOfRange(parameters,1,parameters.length); //exception here
              ...
   }
   ...
}

调用者使用

调用该函数
byte[] byteArray1=...;
byte[] byteArray2=...;
...
foo((byte)1,byteArray1,byteArray2,...);

代码看起来是逻辑和编译的,但是ClassCastException" Object不能转换为[[B"我执行代码后立即抛出。

如何将除第一个参数之外的所有参数作为二维字节数组?

1 个答案:

答案 0 :(得分:1)

您无法转换数组类型。 short[]无法投放到byte[]等等。

但是,我认为您可以使用泛型来解决您的问题:

public <T> void foo(T[] ... params) {
    Class<?> clazz = params[0].getClass();
    if (clazz.equals(short[].class)) {
        //...
    } else if ( ... ) {
        //...
    } else {
        throw new Exception("expected short[] or int[]");
    }
}

你不能把clazz放到开关中,但if-else if-else序列会慢一些。