我想根据用户偏好将数组中的一系列对象转换为不同的类型。
是否可以从数组中引用基本类型进行转换?
public void MakeByteBuffer(float x, float y, float z) {
xyz[0] = x;
xyz[1] = y;
xyz[2] = z;
byteBufferSend.rewind();
for (int i = 0; i < whatToSendVarArray.length; i++) {
switch (whatToSendTypeArray[whatToSendVarArray[i]]) {
case 0:// byte
byteBufferSend.put((byte) xyz[whatToSendVarArray[i]]);
break;
case 1:// short
byteBufferSend
.putShort((short) xyz[whatToSendVarArray[i]]);
break;
case 2:// int
byteBufferSend
.putInt((int) xyz[whatToSendVarArray[i]]);
break;
// Plus more types...
}
byteArrayDataToSend = byteBufferSend.array();
}
}
理想情况下我想:
typeArray={byte,short,int,long,float,double};
byteBufferSend.put???((typeArray[i]) xyz[whatToSendVarArray[i]]);
最佳做法是什么?
答案 0 :(得分:3)
是否可以从数组中引用基本类型进行转换?
没有。
在Java中,您不能将一个基本类型的数组视为一个不同基本类型的数组。因此无论xyz
数组的基本类型是什么,这是您查看元素的唯一方法。
您可以做的最好的事情是提取一个元素,然后显式地投射它。
(我认为反思不会有用,因为反射API不会对基本类型进行转换。)
最佳做法是什么?
最好避免使用这种低级别的东西。但是如果你必须这样做,那就接受这样一个事实:代码不可避免地会变得有点笨拙。
因此,最佳做法是隐藏方法中的笨拙,这样您就不需要在整个代码中执行此类操作。
答案 1 :(得分:0)
你可以通过反思来做到这一点,但它在Java中非常冗长和低效。
实现此目的的最佳方法是免除灵长类动物并使用对象包装类。然后你可以多态地序列化它们。