def instantiate[T](className:String)(args:Any*): T = {
val clazz = Class.forName(className)
val constructor = clazz.getConstructors()(0)
val workArg:Array[AnyRef] = new Array(args.length)
var i=0
for(arg <- args){
workArg(i) = arg match{
case i:AnyRef => i
case i:Int => new java.lang.Integer(i)
case i:Long => new java.lang.Long(i)
case i:Float => new java.lang.Float(i)
case i:Double => new java.lang.Double(i)
case i:Boolean => new java.lang.Boolean(i)
case i:Char => new java.lang.Character(i)
case i:Byte => new java.lang.Byte(i)
case i:Short => new java.lang.Short(i)
case _ => arg.asInstanceOf[AnyRef]
}
i = i + 1
}
return constructor.newInstance(workArg:_*).asInstanceOf[T]
}