锁定老帖子 主题:Nutz: 更可爱的反射
精华帖 (7) :: 良好帖 (3) :: 新手帖 (3) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2010-01-29
最后修改:2010-01-29
Java 的反射让我又爱又恨
比如我有一个 POJO: public class Pet{ private String name; public Pet(String name){ this.name = name; } public String getName(){ return name; } } 如果通过反射创建它,通常要这样写: Constructor<Pet> c = Pet.class.getConstructor(String.class); Pet pet = c.newInstance("XiaoBai"); 但是,有些时候,很多人喜欢通过静态方法来创建一个对象: public class Pet { public static Pet create(String name) { return new Pet(name); } private String name; private Pet(String name) { this.name = name; } public String getName() { return name; } } 那么通过反射就要这样写: Method m = Pet.class.getMethod("create", String.class); Pet pet = (Pet) m.invoke(null, "XiaoBai"); 这很不通用
有没有更方便的方法? 这是我在写 Nutz 时,曾经认真考虑的一个问题。所以我创建了 Mirror。 你的 POJO 无论是通过 静态函数 还是 构造函数 创建,你都可以这样写: Pet pet = Mirror.me(Pet.class).born("XiaoBai"); 这里是 Mirror 类更详细的介绍:http://code.google.com/p/nutz/wiki/lang_mirror 上述写法的缺点就是: 慢 -- 因为它不得不寻找构造函数以及静态函数 如果你打算一口气构建 1000 个对象,并且你的系统对效率要求较高,怎么办呢? 有没有更快的方法? 有 Borning<Pet> b = Mirror.me(Pet.class).getBorning("XiaoBai"); Pet pet = b.born(Lang.array("XiaoBai")); 将 Borning 对象保存起来,下次直接调用,这样就能省却了每次查找 构造函数 或 静态函数 的开销。 但是这有意义吗? 它同: Constructor<Pet> c = Pet.class.getConstructor(String.class); Pet pet = c.newInstance("XiaoBai"); 有区别吗? 我完全可以将 Constructor 也保存起来嘛。 是的,如果你完全确定你的 POJO 就是通过 Constructor 构建的,使用 Borning 可能对你意义不是太大。 Borning 的意义就是 让你不再需要考虑对象是由 Constructor 构建,还是由 Method 来构建 因此,它为你提供了一个新的选择: 当你打算 通过反射 构建对象时 并且你 不确定 你的对象的构造方式将来会不会发生改变 你可以 使用 Borning 它会让你感觉,反射更可爱一些 延伸阅读 Nutz 项目 > http://nutz.googlecode.com 增强反射--Mirror > http://code.google.com/p/nutz/wiki/lang_mirror 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2010-01-29
我喜欢糖,喜欢简单直接,更喜欢简单粗暴,哈哈
|
|
返回顶楼 | |
发表时间:2010-01-29
对啊, 这是nutz其中一个很好的东西!
|
|
返回顶楼 | |
发表时间:2010-01-29
正在看中。。。
|
|
返回顶楼 | |
发表时间:2010-01-29
我认为楼主还没有真正理解反射的意义所在,如果反射都是你这么用,确实很糟糕
|
|
返回顶楼 | |
发表时间:2010-01-29
最后修改:2010-01-29
那你怎么实现构造对象的!!!!
如果你的实现只是封装了java反射的功能的话,实在是多次一举,难道你直接操作了字节码,不好意思,我没看你的源码!! |
|
返回顶楼 | |
发表时间:2010-01-29
反射是很强大,但是毕竟是耗资源的操作,能少用就少用吧
|
|
返回顶楼 | |
发表时间:2010-01-29
详细的看了下包装后的反射, 我实在没有了解到LZ所阐述的“好处”
或者这个只是nutz中的微不足道的一小部分? |
|
返回顶楼 | |
发表时间:2010-01-29
技术滥用,闲的无聊。
|
|
返回顶楼 | |
发表时间:2010-01-30
说实在的,我觉得语言提供反射机制是一种倒退。反射连鸡肋都算不上。
|
|
返回顶楼 | |