我得到了一个带有变量参数列表的函数。根据类型说明符,所有其他参数具有不同的含义。在具体情况下,除第一个参数外,所有参数都包含字节数组。我想将它们转换为二维字节数组:
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"我执行代码后立即抛出。
如何将除第一个参数之外的所有参数作为二维字节数组?
答案 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序列会慢一些。