使用java反射实现对象工厂以及工具类的编写

使用java反射实现对象工厂

如:提供一个方法,根据传入的类的全限定名,创建对象,并返回

public static Object  createeInstance(String className){

try{

1.得到字节码对象

Class clz=Class.forName(className);

2.获得实例

    Object  obj=clz.newInstance();

return obj;

}

cacth(Exception e){

   e.printStackTrace();

}

return null;

}

 

Eg:

Date d1=(Date) createrInstance(“java.util.Date”);

System.out.println(d1.toLocaleString());

要调用Date中的oLocaleString()方法,需要进行强制类型转换

 

每次创建出来的对象,要使用其方法或属性,都要强制转换成目标类型,解决方案:使用泛型方法

public static <T>  T  createeInstance(Class<T>  className){

try{

1.得到字节码对象

Class clz=Class.forName(className);

2.获得实例

    Object  obj=clz.newInstance();

return obj;

}

cacth(Exception e){

   e.printStackTrace();

}

return null;

}

Eg:

Date d1=createrInstance(Date.class);

System.out.println(d1.toLocaleString());

 

解决方案:将上述两种方案综合即可

Class objectFactory{

public static <T>  T  createeInstance(String classNameClass<T>  checkedType){

try{

1得到字节码对象

Class<T>  clz=(Class<T>)  Class.forName(className);

2获得实例

Object  obj=clz.newInstance();

//需要检测checkedType是否是obj的字节码对象

if(!checkedTpye.isInstance(obj)){

     throw new IllegalArgumentException(“对象和类型不兼容”);

}

return (T) obj;

}

cacth(Exception e){

   e.printStackTrace();

}

return null;

}

 

}

Class类的isInstance(Object obj)方法obj是被测试的对象,如果obj是调用这个方法的class或接口 的实例,则返回true。这个方法是instanceof运算符的动态等价。
形象地:自身类.class.isInstance(自身实例或子类实例)  返回true

 

工具类的编写:

方式一:

1.把工具类声明成单例模式

2.把类中的方法声明成非static

调用工具方法,首先得到工具类对象,在调用

 

方式二:

1.把工具类所有的构造器全部私有化

2.把工具类的方法声明为static方法

使用类名.方法名()方式调用工具方法


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值