2012-08-04 83 views
3

我希望根据用户的喜好将一系列对象放在不同类型的数组中。引用到用于铸造的java基元类型

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

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

什么是最好的做法是什么?

+0

这些类型只是数字? – davidbuzatto 2012-08-04 02:53:10

+2

我建议你重新考虑你的整个方法。 – oldrinb 2012-08-04 03:00:45

+0

@davidbuzatto是的。这里的数字对应于类型。完成以帮助兼容开关/外壳。 – 2012-08-04 15:43:49

回答

3

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

在Java号,你不能把一个基元类型的数组,就好像它是一个不同的基本类型的阵列。因此无论xyz数组的基本类型是什么,这是您查看元素的唯一方法。

您可以做的最好的是提取一个元素,然后明确地将其转换。

(反射不会帮助我认为这是因为反射API没有做基本类型的铸造。)


什么是最好的做法是什么?

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

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

0

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

完成此操作的最佳方法是省略primatives并使用对象包装类。然后你可以多态地序列化它们。