使用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方法
使用类名.方法名()方式调用工具方法
如:提供一个方法,根据传入的类的全限定名,创建对象,并返回
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方法
使用类名.方法名()方式调用工具方法
相关文章推荐
- Java 工具类 - 使用POI以及反射实现导出Excel的功能
- java使用dom4j解析xml配置文件实现抽象工厂反射示例
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 利用Java的反射、泛型以及动态参数实现JDBC工具类
- 3.第三单元任务二实训:使用作业提交系统提交Java作业时 ,需要输入Java源代码文件名和自己的邮箱,提交前对Java文件名以及邮箱进行有效检查。编写程序实现对输入的Java源文件名以及邮箱有效性的
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象[修订081217]
- java中使用反射做一个工具类,来为指定类中的成员变量进行赋值操作,使用与多个类对象的成员变量的赋值。
- Java多线程编程-(5)-使用Lock对象实现同步以及线程间通信
- [编写高质量代码:改善java程序的151个建议]建议43 避免对象浅拷贝; 建议44:推荐使用序列化实现对象的深拷贝
- [编写高质量代码:改善java程序的151个建议]建议43 避免对象浅拷贝; 建议44:推荐使用序列化实现对象的深拷贝
- [原创]Java使用反射及自定义注解实现对象差异性比较
- 编写实现连接oracle数据库并返回Connection对象的Java工具类
- 自己编写的一个Json工具类,实现了反射将整个Object转换为Json对象的功能,支持Hibernate的延迟加载对象
- 使用BlazeDS实现java与flex传对象时,RemoteClass中包含自己写的类,后台无法转换的问题
- 通过JAVA反射实现简单的ORM,将查询结果封装为对象
- 使用Java的动态代理技术实现对象适配器模式
- 一个新的对象创建机制的思考--C++下实现类似于Java的对象管理机制及反射
- 使用反射机制将纯Java对象放入数据库中
- 使用反射在.NET中实现动态工厂
- 关于一道J笔试或者机试题的Java实现:从键盘输入一串字符,翻转后输出(要求不使用string相关类即对象)