参考Java基本数据类型进行类型转换

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

最佳实践是什么?


这些类型只是数字吗? - davidbuzatto
2
我建议您重新考虑整个处理方式。 - obataku
@davidbuzatto 是的。这里的数字对应于类型。这样做是为了帮助与switch/case的兼容性。 - Jonathan Abbott
2个回答

3
能否使用一个数组引用原始类型进行转换?
不行。
在Java中,您不能将一个基本类型的数组视为不同基本类型的数组。因此,无论xyz数组的基本类型是什么,这都是您可以查看元素的唯一方式。
最好的方法是提取一个元素,然后显式地转换它。
(我认为反射并不能帮助,因为反射API不会对原始类型进行转换。)
最佳实践是什么?
最好避免这种低级别的操作。但如果必须这样做,请接受代码不可避免会有点笨拙的事实。
因此,最佳实践是将笨拙放入一个方法中,这样您就不需要在整个代码中执行此类操作。

0

你可以通过反射来实现这个功能,但在Java中这种方法非常冗长且效率低下。

最好的方法是放弃原始类型并使用对象包装类。然后你就可以通过多态地序列化它们。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接