java反射创建工厂对象

  问题:通过类的全限定名来创建对象,并创建工厂对象


DEOM案例如下:

package invokeBeanFactorty;


import java.util.Date;

/**
 * java反射通过类全限定名创建对象
 * @author Administrator
 *
 */
public class invokeObject {
    
      public static void main(String[] args) throws InstantiationException, IllegalAccessException, ClassNotFoundException {
         /*这里以java.util.Date为列子*/
      
      Object obj = getInstance("java.util.Date");
      
      /*这种方式需要强转 意义不大*/
      Date date = (Date) obj;
     System.out.println(date.toLocaleString());
    
     /*在方法中预先对强转进行处理*/
        Class claz = Class.forName("java.util.Date");
     Date date1 = getInstance2("java.util.Date",Date.class);
      System.out.println(date1.toLocaleString()+"方式2");
      
      BeanFactory  bf = new BeanFactory();
      Date date2 = bf.getBeanFactory("java.util.Date",Date.class);
      System.out.println(date2.toLocaleString()+"工厂方式创建对象");
      
    }
       
           /*1.通过全限定名获取对应的clas    s对象*/
       public static Object getInstance(String name) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
           Class claz = Class.forName(name);
         return  claz.newInstance();      
       }
       
          /*2.通过泛型类型方式,在方法中预先强转*/
       public static <T>T getInstance2(String name,Class<T> checkType) throws InstantiationException, IllegalAccessException, ClassNotFoundException{
         
          /*通过全限定名获取class对对象,并强转为对应泛型类型*/
          Class<T> claa = (Class<T>) Class.forName(name);
          
          Object obj = claa.newInstance();
          
          /*判断是否是符合指定类型的对象,如果符合则转为指定的类型,否则抛出参数异常*/
          if(checkType.isInstance(obj)){
          return (T)obj;
          }else{
          throw new IllegalArgumentException("参数类型不匹配");
          }
       }
       
       

}


工厂创建注意涉及到设计模式中的单列模式:

DEMO如下


package invokeBeanFactorty;

/**
 * 利用java反射创建一个对象工厂  创建对象工厂模式 涉及到设计模式中的单列模式

    枚举单列模式的调用方式:  Date date2 = BeanFactory.INSTANCE.getBeanFactory("java.util.Date",Date.class);

 * @author Administrator
 *
 */
public enum BeanFactory {
    INSTANCE;

         public <T>T  getBeanFactory(String name,Class<T> checkType){

             Object obj;
        try {
        Class<T> claz = (Class<T>) Class.forName(name);
        obj = claz.newInstance();
            if(!checkType.isInstance(obj)){
                 throw new IllegalArgumentException("参数类型不匹配");
                 }else{
                     return (T)obj;
                 }
        } catch (Exception e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
        }
     
         
         return null;
         }
}


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值