引用用于转换的java基元类型

时间:2012-08-04 02:34:00

标签: java casting primitive-types refer

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

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

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

最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

  

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

没有。

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

您可以做的最好的事情是提取一个元素,然后显式地投射它。

(我认为反思不会有用,因为反射API不会对基本类型进行转换。)


  

最佳做法是什么?

最好避免使用这种低级别的东西。但是如果你必须这样做,那就接受这样一个事实:代码不可避免地会变得有点笨拙。

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

答案 1 :(得分:0)

你可以通过反思来做到这一点,但它在Java中非常冗长和低效。

实现此目的的最佳方法是免除灵长类动物并使用对象包装类。然后你可以多态地序列化它们。