2009-10-02 29 views
0

如果varg設置爲null,如何在Java中獲取變量參數的數據類型?我使用getClass來檢索類型。有沒有其他方法?如果在Java中將varg設置爲null,則獲取vargs的類類型

public void method(String name, Object ... vargs) 
{ 
    for(Object arg : vargs) 
    { 
     mapType.put(arg.getClass()); 
     mapVal.put(arg); 
    } 
} 

我唯一能想到的就是使用來自調用函數的註釋。有沒有其他方法?

回答

2

我們已經堆積了相同的問題從DB加載數據並按預期投射。 不幸的是null沒有類型。相反,我們使用了通用包裝器,它總是非空的,但可以包含空值。在這種情況下,類型信息可用於包裝器的字段。

+0

你有沒有想過使用Void類,正如我在我的答案中所建議的那樣? – KLE 2009-10-02 09:24:00

2

我不知道我明白你在做什麼。空沒有課。如果您想要調用函數使用的變量的靜態類,則可以將該類作爲參數傳遞。

+0

我的意思是用於傳遞的參數是一個類型的變量(例如日期),但日期恰好是傳遞時設置爲空。 – Nap 2009-10-02 09:12:42

+0

參數的靜態類型是Object - 它在方法的簽名中如此表示。表達式的靜態類型在方法的調用中傳遞的參數的計算方法不可見。 – 2009-10-02 09:22:33

2

你可以使用

if (arg == null) 

來處理它作爲一個特例,它分配一個類,其中對象或空似乎是適當的。

2

讓我們分隔可變參數和空值之間的問題。

可變參數

可變參數的一點是要發送數據的陣列,而不需要在呼叫者的代碼作爲數組,但作爲單個變量或常數。

調用的可變參數可能不是很直觀,這裏的在各種情況下會發生什麼:

method("", "1", "2"); // vargs is {"1", "2"} 
    method(""); // vargs is {}, the empty array (it is not null) 
    method("", null); // vargs is {null}, size 1 array containing the element 'null' 
    method("", (Object[])null); // vargs is null, a null instance 

需要注意的是第三種情況被認爲是不好的形式。例如,如果null是常量(未存儲在變量中),則會收到警告。

請注意,在第四種情況下,您確實在尋找問題! ;-)

的類現在,我們正在談論的是包含空值,不是一個空數組的數組(即在前面的部分整理出來)。

一般情況下

空可以是任何(全部在同一時間)。但instanceof將始終返回false。

放入地圖

如果一個值爲null,你需要考慮你想要做什麼。顯然,getClass()不能在空值上調用。所以,你可以選擇之間:

  1. 跳過空值,而不是將其添加在地圖
  2. 選擇一類要關聯爲空。這可能是Object,或Void或其他特定的類。想想你想用它做什麼,因爲該協會是任意的...
相關問題