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   
 

你可能感兴趣的:(JAVA基础)