使用反射(reflection)创建对象,访问方法和属性的缺点包括:
1.不能在编译时进行类型检查
2.反射代码比较繁复
3.性能较低,可能比正常的方法调用低2-50倍
如果被反射的类继承了父类或实现了接口,那么可使用接口/父类类型引用此反射类,然后调用相关方法,以下代码通过反射调用ArrayList对象的add():
@Test public void doByReflection() throws Exception{ Class<?> clazz=Class.forName("java.util.ArrayList"); Object list= clazz.newInstance(); Method addMethod=clazz.getMethod("add", Object.class); for(int i=0;i<10000;i++) addMethod.invoke(list, i); Integer size=(Integer) clazz.getMethod("size").invoke(list); Assert.assertEquals(size, Integer.valueOf(10000)); }
以下代码通过List接口调用了ArrayList对象的add()方法(理论上性能更高,实际测试时发现不一定,与前者相比,有时候更慢):
@Test public void doByNormal() throws Exception{ Class<?> clazz=Class.forName("java.util.ArrayList"); List<Integer> list=(List<Integer>) clazz.newInstance(); for(int i=0;i<10000;i++) list.add(i); Assert.assertEquals(list.size(), 10000); }
一般反射用于开发工具或应用工具分析系统所具有的类以及他们所支持的方法。在正常的应用系统里,应尽量避免使用反射创建对象或调用对象方法
相关推荐
速达3000netv8.53、100用户
可直接使用IE的书签、频道。增加了E-mail的客户端功能,可以使用多个账户,拥有128位的加密技术。支持TLS, SSL 2, SSL 3, CSS1,CSS2,XML,HTML 4.0,HTTP 1.1,WML,ECMAScript,Javascript 1.3 等项功能,此外还有最新...
3000.net 8.53_100用户完美补丁
速达3000 .net 8.53 10用户完美
速达3000pro服务器.8.53-patch,仅用于学习交流
SD3000Pro_8.53网络版补丁
AlphaControls皮肤编辑器v8.53版本
速达3000NET V8.53 999用户补丁,我用过了一年,现在还没有什么问题,无二次加密.
3000pro 8.53我刚从网上下载的,不知道可不可以用
EDIUS_8.53.3262Win10_1803x64x86破解启动补丁,解决EDIUS_853在Windows10(1803)中无法启动问题的破解。
速达3000pro 8.53破解补丁 最完美的速达破解版本 完美使用2年
HASPUserSetupV8.53最新版
经测试长期稳定,诸位看需要下载,转自阳光论坛。
速达3000pro8.53单机光盘.zip原版安装程序光盘
亲测可用
复制补丁到安装文件夹,即可使用。需要填加到白名单。
速达3000std8.53安装程序,只有速达安装程序没有MSDE数据库安装程序,要另外下载MSDE数据库
Toad 8.53 TOAD 是 Oracle开发和管理工具套件,包含集成化的开发、测试、管理与优化功能,可以大大提高数据库开发和管理人员的工作效率。 现在用10G的数据库越来越多了,要Toad 8.53也要更新了.
Toad 8.53 现在用10G的数据库越来越多了,Toad 也要更新了.
Toad 8.53 现在用10G的数据库越来越多了,Toad 也要更新了.