2012-07-15 80 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