您的位置:首页 > 编程语言 > Java开发

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

2016-12-02 21:08 513 查看
使用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 className,Class<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方法

使用类名.方法名()方式调用工具方法
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐