JAVA动态生成对象

如果是动态加载就不能采用强制转换类型这种方法。因为我们并不知道这个类到底是Class到底是什么class。也就说如果你用这些代码:  
  String   className="MyClass";  
  Clsss   iClass   =   Class.forName(className);  
  Object   iObj   =iClass.newInstance();  
  生成了iObj,你确实不能用classname来动态转换。  
  如果要使用这个生成的object应该怎么办呢?  
  我假设你的MyClass如下定义。  
  public   class     MyClass  
  {  
  public   MyClass(){  
  }  
  public     void   sayHello(String   who)  
  {  
  System.out.println("hello   world   "+who);  
  }  
  }  
  如果要动态的使用sayHello,可以用如下代码  
  import   java .lang.reflect.*;  
  class     TestClass  
  {  
  public   static   void   main(String[]   args)    
  {  
                                      //这是sayHello的参数类型为String  
  Class[]   parameterTypes={String.class};  
                                      // 准备 把you这次字符串传进去  
  Object[]   parameter={"you"};  
                                      //以下是动态装入的类名和需要调用的函数名  
  String   className="MyClass";  
  String   methodName="sayHello";  
  try{  
  Class   iClass=Class.forName(className);  
                                      //产生一个Method对象(sayHello)  
  Method   method=iClass.getMethod(methodName,parameterTypes);  
                                      //Class.forname只是动态的装入了类,我们还需要产生对象,因此  
                                      //需要调用它的 构造 函数,用以下方法调用  
  Constructor   con=iClass.getConstructor(new   Class[]{});  
  Object   myclass=con.newInstance(new   Object[]{});  
                                      //对象生成啦,现在调用它  
  method.invoke(myclass,parameter);  
   
  }  
  catch(Exception   e)  
  {  
  e.printStackTrace();  
  }  
  }  
  }  
  上面的代码答应hello   world   you  
  这段代码等同于  
  MyClass   myclass=new   MyClass();  
  myclass.sayHello("you");  
  由此可以看出动态的调用比静态的复杂得多。具体的api函数请参考java   api   
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值