打字猴:1.700447982e+09
1700447982 虽然以上代码可以动态加载一个数组类,但是这没有任何意义,因为它不能生成一个数组对象,也就是说以上代码只是把一个String类型的数组类和long类型的数组类加载到了内存中(如果内存中没有该类的话),并不能通过newInstance方法生成一个实例对象,因为它没有定义数组的长度,在Java中数组是定长的,没有长度的数组是不允许存在的。
1700447983
1700447984 既然反射不能定义一个数组,那问题就来了:如何动态加载一个数组呢?比如依据输入动态产生一个数组。其实可以使用Array数组反射类来动态加载,代码如下:
1700447985
1700447986 //动态创建数组
1700447987
1700447988 String[]strs=(String[])Array.newInstance(String.class,8);
1700447989
1700447990 //创建一个多维数组
1700447991
1700447992 int[][]ints=(int[][])Array.newInstance(int.class,2,3);
1700447993
1700447994 因为数组比较特殊,要想动态创建和访问数组,基本的反射是无法实现的,“上帝对你关闭一扇门,同时会为你打开另外一扇窗”,于是Java就专门定义了一个Array数组反射工具类来实现动态探知数组的功能。
1700447995
1700447996 注意 通过反射操作数组使用Array类,不要采用通用的反射处理API。
1700447997
1700447998
1700447999
1700448000
1700448001 编写高质量代码:改善Java程序的151个建议 [:1700438179]
1700448002 编写高质量代码:改善Java程序的151个建议 建议106:动态代理可以使代理模式更加灵活
1700448003
1700448004 Java的反射框架提供了动态代理(Dynamic Proxy)机制,允许在运行期对目标类生成代理,避免重复开发。我们知道一个静态代理是通过代理主题角色(Proxy)和具体主题角色(Real Subject)共同实现抽象主题角色(Subject)的逻辑的,只是代理主题角色把相关的执行逻辑委托给了具体主题角色而已,一个简单的静态代理如下所示:
1700448005
1700448006 //抽象主题角色
1700448007
1700448008 interface Subject{
1700448009
1700448010 //定义一个方法
1700448011
1700448012 public void request();
1700448013
1700448014 }
1700448015
1700448016 //具体主题角色
1700448017
1700448018 class RealSubject implements Subject{
1700448019
1700448020 //实现方法
1700448021
1700448022 public void request(){
1700448023
1700448024 //业务逻辑处理
1700448025
1700448026 }
1700448027
1700448028 }
1700448029
1700448030 //代理主题角色
1700448031
[ 上一页 ]  [ :1.700447982e+09 ]  [ 下一页 ]