Effective Java之接口优先于反射机制(五十三)
2018-01-08 07:25
447 查看
核心反射机制java.lang.reflect提供了“通过程序来访问关于已装载的类的信息”的能力,给定一个Class实例,可以获得Constructor、Method、Field实例,这些对象提供“通过程序来访问类的成员名称、域类型、方法签名等信息”的能力。
反射机制允许一个类使用另一个类,即使当前者被编译的时候后者还根本不存在,存在的代价:
1.失去编译时类型检查的好处,包括异常检查。
2.执行反射访问所需的代码很长。
3.性能上的损失。
有些复杂的应用程序需要使用反射机制,包括类浏览器、对象检测器、代码分析工具、解释型的内嵌式系统。在RPC中使用反射机制也是合适的,这样就不再需要存根编译器。
对于有些程序,必须用到在编译时无法获取的类,但是在编译时存在适当的接口或者超类,通过它们可以引用这个类,就可以以反射的方式创建实例,然后通过它们的接口或者超类,以正常的方式访问这些实例。
这相当于一个集合测试器,通过反射测试Set实现,同时,它也可以作为通用的集合性能分析工具。
这种方法足以完成成熟的服务提供者框架。
具体怎么实现,可以去看一下这篇文章
服务提供者框架
反射机制允许一个类使用另一个类,即使当前者被编译的时候后者还根本不存在,存在的代价:
1.失去编译时类型检查的好处,包括异常检查。
2.执行反射访问所需的代码很长。
3.性能上的损失。
反射机制的使用场景
反射功能只是在设计时被用到,通常,普通应用程序在运行时不应该以反射的方式访问对象。有些复杂的应用程序需要使用反射机制,包括类浏览器、对象检测器、代码分析工具、解释型的内嵌式系统。在RPC中使用反射机制也是合适的,这样就不再需要存根编译器。
对于有些程序,必须用到在编译时无法获取的类,但是在编译时存在适当的接口或者超类,通过它们可以引用这个类,就可以以反射的方式创建实例,然后通过它们的接口或者超类,以正常的方式访问这些实例。
反射机制的例子
创建Set实例,吧命令行参数插入到集合中,然后打印该集合,其中第一个参数指定打印的结果,如果是HashSet以随机的方式打印出来,如果是TreeSet按照字母顺序打印出来的程序:public static void main(String[] args) { Class<?> c = null; try { c = Class.forName(args[0]); } catch(ClassNotFoundException e) { System.out.println("Class not found"); System.exit(1); } Set<String> s = null; try { s = (Set<String>) c.newInstance(); } catch(IllegalAccessException e) { System.out.println("Class not accessible"); System.exit(1); } catch(InstantiationException e) { System.out.println("Class not instantiable"); System.exit(1); } s.addAll(Arrays.asList(args).subList(1, args.length)); System.out.println(s); }
这相当于一个集合测试器,通过反射测试Set实现,同时,它也可以作为通用的集合性能分析工具。
这种方法足以完成成熟的服务提供者框架。
具体怎么实现,可以去看一下这篇文章
服务提供者框架
相关文章推荐
- Effective Java 学习笔记(第53条:接口优先于反射机制)
- java接口优先于反射机制
- 初识JAVA(【面向对象】:pub/fri/pro/pri、封装/继承/多态、接口/抽象类、静态方法和抽象方法;泛型、垃圾回收机制、反射和RTTI)
- 第五十三条:接口优先于反射机制
- EffectiveJava(18)接口优先于抽象类
- 2015070303 - EffactiveJava笔记 - 第53条 接口优于反射机制
- 第53条:接口优先于反射机制
- java 反射机制 观点
- Java 的反射机制
- Java 反射机制
- Java:反射机制详解
- Java:Effective Java 学习笔记(第49条:基本类型优先于装箱基本类型)
- java 反射机制修改的导出
- EffectiveJava(29)优先考虑类型安全的异构容器
- Java中的反射机制
- java 利用反射机制,获取实体所有属性和方法,并对属性赋值
- java中的反射机制
- 28、Java反射(reflection)机制(很重要)
- java.lang.Class<T> -- 反射机制
- Java的反射机制