2012-07-15 116 views
1

Java中有確定自動裝箱是否完成的方法嗎?確定AutoBoxing是否已完成

例如

void functionInt(Integer i) { 
//Determine if Integer was passed or int was passed. Is it possible? 
} 

int i = 1; 
int ii = new Integer(1); 
functionInt(i); 
functionInt(ii); 

被叫方能夠區分這2個電話?

+0

爲什麼?它對被調用者有什麼不同? – EJP 2012-07-15 10:39:45

+0

@EJP:在下面Jeffrey的回覆中看到我的評論。 – 2012-07-15 23:22:01

回答

4

functionInt將始終通過Integer,並且無法確定該Integer是否由於自動裝箱而被創建。

你可以做的是創造重載函數:

void functionInt(Integer i); 
void functionInt(int i); 

/編輯

如果你有下面的類:

​​

您可以撥打Foo.class.getConstructor(int.class).newInstance(new Integer(5))沒有任何問題。檢查Constructorint.class作爲參數,而不是java.util.Integer,如果找不到java.util.Integer,應該相當簡單。

+0

我想創建一個函數,使用反射來調用Class上相應的構造函數。我將參數作爲Object Array傳遞,後來我需要調用構造函數,該構造函數接受原始int而不是Integer。否則,我將不得不進行大量的處理來確定正確的構造函數。 – 2012-07-15 00:23:00

+2

@ vikky.rk如果這是你確切的問題,那麼你應該問這是你的問題。看我的編輯。 – Jeffrey 2012-07-15 00:39:11

+0

我的目的是創建一個函數「public static T createInstance(Class cObj,Obj ... initArgs)」,它創建一個類型爲T的新實例,initArgs是構造函數參數。所以我需要匹配相應的構造函數並調用Constructor.newInstance(initArgs)。匹配是我面臨區分Integer和int的問題的地方。 – 2012-07-15 01:30:34