对用于强制转换的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是的。这里的数字对应于类型。这样做有助于与交换机/机箱兼容。