« 上一页 1
浏览 11449 次
锁定老帖子 主题: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 但是,有些时候,很多人喜欢通过静态方法来创建一个对象: 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"); 这很不通用
有没有更方便的方法? 这是我在写 时,曾经认真考虑的一个问题。所以我创建了 。 你的 pojo 无论是通过 静态函数 还是 构造函数 创建,你都可以这样写: pet pet = mirror.me(pet.class).born("xiaobai"); 这里是 mirror 类更详细的介绍: 上述写法的缺点就是: 慢 -- 因为它不得不寻找构造函数以及静态函数 如果你打算一口气构建 1000 个对象,并且你的系统对效率要求较高,怎么办呢? 有没有更快的方法? 有 borning 将 borning 对象保存起来,下次直接调用,这样就能省却了每次查找 构造函数 或 静态函数 的开销。 但是这有意义吗? 它同: constructor 有区别吗? 我完全可以将 constructor 也保存起来嘛。 是的,如果你完全确定你的 pojo 就是通过 constructor 构建的,使用 borning 可能对你意义不是太大。 borning 的意义就是 让你不再需要考虑对象是由 constructor 构建,还是由 method 来构建 因此,它为你提供了一个新的选择: 当你打算 通过反射 构建对象时 并且你 不确定 你的对象的构造方式将来会不会发生改变 你可以 使用 borning 它会让你感觉,反射更可爱一些 延伸阅读 nutz 项目 > 增强反射--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
说实在的,我觉得语言提供反射机制是一种倒退。反射连鸡肋都算不上。
|
请登录后投票 |
|
« 上一页 1