2012-08-04 81 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並使用對象包裝類。然後你可以多態地序列化它們。