对用于强制转换的java基元类型的引用

对用于强制转换的java基元类型的引用,java,casting,primitive-types,refer,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++) {

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

可以从数组中引用基元类型进行强制转换吗

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();
    }
}

最佳实践是什么?

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

实现这一点的最佳方法是省去primative并使用对象包装器类。然后您可以将它们以多态方式序列化

可以从数组中引用基元类型进行强制转换吗

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();
    }
}
没有

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

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

(我认为反射不会有帮助,因为反射API不进行基本类型的转换。)


最佳做法是什么

最好避免这种低级的东西。但是如果你不得不这么做,接受这样一个事实:代码不可避免地会有点笨重


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

这些类型只是数字?我建议您重新考虑整个方法。@davidbuzatto是的。这里的数字对应于类型。这样做有助于与交换机/机箱兼容。