3

我想根据用户偏好将数组中的一系列对象转换为不同的类型。

是否可以从数组中引用原始类型进行转换?

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]]);

最佳做法是什么?

4

2 回答 2

3

是否可以从数组中引用原始类型进行转换?

不。

在 Java 中,您不能将一个原始类型的数组视为不同原始类型的数组。因此,无论数组的基本类型xyz是什么,这是查看元素的唯一方法。

您能做的最好的事情就是提取一个元素,然后显式地转换它。

(我认为反射无济于事,因为反射 API 不进行原始类型的转换。)


最佳做法是什么?

最好避免这种低级的东西。但是,如果您必须这样做,请接受这样一个事实,即代码不可避免地会有点笨拙。

因此,最佳实践是将笨拙隐藏在方法中,这样您就不需要在整个代码中执行此类操作。

于 2012-08-04T02:42:08.193 回答
0

您可以通过反射来做到这一点,但它在 Java 中非常冗长且效率低下。

实现这一点的最好方法是放弃原始数据并使用对象包装类。然后你可以多态地序列化它们。

于 2012-08-04T02:36:52.533 回答