java 动态创建对象

 

      做项目的时候遇到一个问题,就是需要动态加载类并实例化对象.现在分享给大家!

    另外说句题外话,Class.forName("").newInstance();用于工厂真的是挺好的,有用到的时候你可以试试!

    简单介绍下:Class.forName( )静态方法的目的是为了动态加载类。在加载完成后,一般还要调用Class下的newInstance( )静态方法来实例化对象以便操作。因此,单单使用Class.forName( )是动态加载类是没有用的,其最终目的是为了实例化对象。

  上代码的说:

  先是父类代码:

1 package com.test.entity;
2 
3 public class ItemBase {
4      public String toString(){
5         return "ItemBae";
6     }
7     
8 }

    子类代码:

package com.test.entity;

public class ItemA extends ItemBase{
     
    private String name;
    private String age;
    
     
     @Override
     public String toString(){
      return "A的name:"+name+",A的age:"+age;
     
    }

    public String getName() {
    return name;
      }

      public void setName(String name) {
    this.name = name;
     }

     public String getAge() {
    return age;
     }

     public void setAge(String age) {
    this.age = age;
     }
    
}

 

 

   

package com.test.entity;

public class ItemB extends ItemBase{
     
    private String name;
    private String age;
    
     
     @Override
     public String toString(){
      return "B的name:"+name+",B的age:"+age;
     
    }

    public String getName() {
    return name;
      }

      public void setName(String name) {
    this.name = name;
     }

     public String getAge() {
    return age;
     }

     public void setAge(String age) {
    this.age = age;
     }
    
}

  工厂代码:
 

package com.test.factory;

import com.entity.test.entity.ItemBase;

public class Factory {
    
    public static ItemBase createObj(String className) throws Exception{
            return (ItemBase)Class.forName(className).newInstance();
    }
    


 用法

public class Test {
    public static void main(String[] args) {
        
    ItemBase itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemA");
               System.out.println("A:"+itemBase.toString());

                itemBase=(ItemBase)Factory.createObj("com.test.entity.ItemB");
               System.out.println("B"+itemBase.toString());
     }

}

 这里只是个示范,你可以去把你的类配置到xml去动态的读取,只需改XML你就能得到你想要的类`~用法很多`~ 我只是简单的演示下

posted @ 2012-04-27 16:51  楠以言表  阅读(20614)  评论(0编辑  收藏  举报