- 浏览: 2467414 次
- 性别:
- 来自: 杭州
文章分类
- 全部博客 (574)
- Book (62)
- Architecture (6)
- Java (39)
- Taobao (41)
- Distributed (4)
- Life (72)
- Database (7)
- Spring (16)
- Photography (15)
- Bicycle (41)
- Test (20)
- jBPM (8)
- Business (12)
- Movie (3)
- Ajax (15)
- Code (7)
- Eclipse (96)
- VIM (2)
- Music (6)
- Groovy (10)
- AutoHotKey (3)
- Dorado (10)
- Maven (7)
- Scrum (5)
- English (20)
- Financial (12)
- OSGi (3)
- Other (4)
- Tool (6)
- Browser (1)
- PPT (1)
- Project Management (4)
- Agile (6)
- Nosql (1)
- Search engine (6)
- Shell (2)
- Open Source (4)
- Storm (10)
- Guava (3)
- Baby (1)
- netty (1)
- Algorithm (1)
- Linux (1)
- Python (2)
最新评论
-
roy2011a:
https://github.com/ebottabi/sto ...
storm的序列化问题及与spring的结合方式 -
roy2011a:
能抗能打 写道哥们儿,你好!能共享下那个storm与sprin ...
storm的序列化问题及与spring的结合方式 -
Alick1:
兄弟,你之前是不是在深圳的正阳公司呆过啊?
storm的ack和fail -
liuleixwd:
先点个赞,写的非常好!有个问题请教下,如果我再bolt里不用e ...
storm的ack和fail -
yao-dd:
solr的facet查询
原文:http://lukaseder.wordpress.com/2011/12/29/a-neater-way-to-use-reflection-in-java/
Java的反射机制是Java一个非常强大的工具, 但是和大多数脚本语言相比, 使用起来却是有种"懒婆娘的裹脚布——又臭又长"的感觉.
比如在PHP语言中, 我们可能这样写:
在JavaScript语言中, 我们会这样写:
在Java中, 我们会这样写:
上面的代码还没有考虑到对各种异常的处理, 比如NullPointerExceptions, InvocationTargetExceptions, IllegalAccessExceptions, IllegalArgumentExceptions, SecurityExceptions. 以及对基本类型的处理. 但是大部分情况下, 这些都是不需要关心的.
为了解决这个问题, 于是有了这个工具: jOOR (Java Object Oriented Reflection).
对于这样的Java代码:
使用 jOOR的写法:
在Stack Overflow上相关的问题讨论:
http://stackoverflow.com/questions/4385003/java-reflection-open-source/8672186
另一个例子:
jOOR相关的信息, 请猛击:
http://code.google.com/p/joor/
Java的反射机制是Java一个非常强大的工具, 但是和大多数脚本语言相比, 使用起来却是有种"懒婆娘的裹脚布——又臭又长"的感觉.
比如在PHP语言中, 我们可能这样写:
// PHP $method = 'my_method'; $field = 'my_field'; // Dynamically call a method $object->$method(); // Dynamically access a field $object->$field;
在JavaScript语言中, 我们会这样写:
// JavaScript var method = 'my_method'; var field = 'my_field'; // Dynamically call a function object[method](); // Dynamically access a field object[field];
在Java中, 我们会这样写:
String method = "my_method"; String field = "my_field"; // Dynamically call a method object.getClass().getMethod(method).invoke(object); // Dynamically access a field object.getClass().getField(field).get(object);
上面的代码还没有考虑到对各种异常的处理, 比如NullPointerExceptions, InvocationTargetExceptions, IllegalAccessExceptions, IllegalArgumentExceptions, SecurityExceptions. 以及对基本类型的处理. 但是大部分情况下, 这些都是不需要关心的.
为了解决这个问题, 于是有了这个工具: jOOR (Java Object Oriented Reflection).
对于这样的Java代码:
// Classic example of reflection usage try { Method m1 = department.getClass().getMethod("getEmployees"); Employee employees = (Employee[]) m1.invoke(department); for (Employee employee : employees) { Method m2 = employee.getClass().getMethod("getAddress"); Address address = (Address) m2.invoke(employee); Method m3 = address.getClass().getMethod("getStreet"); Street street = (Street) m3.invoke(address); System.out.println(street); } } // There are many checked exceptions that you are likely to ignore anyway catch (Exception ignore) { // ... or maybe just wrap in your preferred runtime exception: throw new RuntimeException(e); }
使用 jOOR的写法:
Employee[] employees = on(department).call("getEmployees").get(); for (Employee employee : employees) { Street street = on(employee).call("getAddress").call("getStreet").get(); System.out.println(street); }
在Stack Overflow上相关的问题讨论:
http://stackoverflow.com/questions/4385003/java-reflection-open-source/8672186
另一个例子:
String world = on("java.lang.String") // Like Class.forName() .create("Hello World") // Call the most specific matching constructor .call("substring", 6) // Call the most specific matching method .call("toString") // Call toString() .get() // Get the wrapped object, in this case a String
jOOR相关的信息, 请猛击:
http://code.google.com/p/joor/
评论
3 楼
huangfoxAgain
2012-02-25
这个工具不错!
2 楼
yangbobestone
2012-02-10
这个工具是比Java的反射机制要方便,不错。。。。
1 楼
feikiss
2012-02-04
我试了下,这个工具的确很方便。谢谢分享~~
发表评论
-
使用Externalization更高效的实现java对象序列化
2012-04-04 22:38 3144Externalization没用过, 它通过牺牲默认序列化的 ... -
关于java的检查异常和非检查异常
2012-04-04 21:31 4953这里有一个关于java的检查异常和非检查异常的观点, 我比较赞 ... -
使用ThreadLocal保证DateFormat线程安全
2012-04-03 06:45 3597大家都知道DateFormat是线程非安全的, 一般在多线程环 ... -
使用枚举实现一个状态机
2012-04-02 23:14 3934非常巧妙的一个使用枚举的例子.原文见这里 interface ... -
一个同步队列例子
2012-04-02 21:35 1564这个用的也比较少, 做一个参考, 原文见这里 private ... -
一个读写锁的例子
2012-04-02 21:20 1528用的比较少, 做一个参考. 原文在这里 public clas ... -
如何计算一个合适的线程池大小参数
2012-04-02 20:57 9067原文在这里 下面是一个计算的框架代码: /** * A ... -
正确使用日志的10个技巧
2012-02-11 21:13 28848做一个苦逼的Java攻城师, 我们除了关心系统的架构这种hig ... -
Sensei:分布式, 实时, 半结构化数据库
2012-02-04 22:24 3940在未出现开源搜索引擎 ... -
Java编程最差实践
2012-02-04 17:54 26623原文地址:http://www.odi.ch/prog/des ... -
Zookeeper开源客户端框架Curator简介
2012-01-21 19:52 99596Curator是Netflix开源的一 ... -
如何删除N天前的log4j日志
2012-01-15 19:52 19936最近要实现定期删除N天前的日志。 以前都是利用运维的一个cro ... -
《Java Performance》书评
2012-01-15 18:32 2960原文: http://java.dzone.com/rev ... -
《细说Java》读书笔记
2011-10-05 15:01 1993国人写的, 感觉是一 ... -
《Java开发超级工具集》读书笔记
2011-09-28 08:59 2098"工欲善其事必先利其器", 在平时的开发 ... -
《effective java》 读书笔记
2011-07-02 14:52 7599读第一版已经是好几年前的事儿了, 现在想起来也没什么印象, ... -
用java实现"awk -d"功能(保留多行重复)
2010-06-07 21:48 3068一般用过linux脚本的都知道"awk -d&quo ... -
关于方法返回值的两种处理模式
2010-05-13 09:06 2028目前在处理返回值方面, ... -
JVM调优汇总
2010-02-21 19:18 14413参考网址 http://pengjiaheng.spaces. ... -
log4j的输出转换模式
2009-12-12 10:02 1272转换模式(conversion pattern)为" ...
相关推荐
这就是jOOR项目的意义所在——它提供了一个更加简洁、直观的Fluent API,使得Java反射变得更加易于理解和使用。 jOOR是Java的一个开源项目,其主要目标是简化Java反射操作。它引入了Fluent API的设计模式,通过链式...
jOOR - Fluent Reflection in Java jOOR is a very simple fluent API that gives access to your Java Class structures in a more intuitive way. The JDK's reflection APIs are hard and verbose to use. Other ...
jOOR代表jOOR面向对象反射。 它是java.lang.reflect包的简单包装。 jOOR的名称受到jOOQ的启发,jOOQ是一种用于SQL构建和执行的流利的API。 依存关系 没有任何! 下载 适用于Java 9+ < groupId>org.jooq ...
jOOR 在java原生的反射基础上进行了简单的封装,使得反射使用方便不少! 举个简单的列子,供大家参考。 java 原生反射写法: try { Method m1 = department.getClass().getMethod("getEmployees"); Employee ...
NULL 博文链接:https://zhaoxiaoboblogs.iteye.com/blog/2356043
Java中的反射机制是Java语言一个强大的特性,它允许运行时检查和操作类、接口、对象以及它们的方法和字段。jOOR项目就是为Java提供了一种流畅...对于那些经常使用反射的Java开发者来说,jOOR无疑是一个值得尝试的工具。
针对这种问题,作者提出了使用jOOR库来简化反射的实践。jOOR是一个简洁的Java反射API,它提供了一种更优雅的方式来处理反射任务。例如,使用jOOR,上述代码可以简化为: ```java // 使用jOOR简化反射创建对象 ...
从Java 8开始,引入了流(Stream)的概念,虽然原生的Java API不直接支持Excel操作,但可以借助其他库,如jOOR,通过反射API操作Excel对象,结合Java 8的数据流进行处理。 例如,使用jOOR库读取Excel: ```java ...
更好的使用java: [Json] Gson: [xml==>webservice] [Rxjava] [Okhttp] [Retrofit] [Guava] [数据库访问:原生==>nutz==>其他] [数据库优化] [java GUI] [twinkle] [jcommunique] [java cocos2d:CDK] cdk:() c
约旦jOOλ是jOOQ系列的一部分(以及jOOQ,jOOX,jOOR,jOOU),为Java 8 lambda提供了一些有用的扩展。 它包含以下类:org.jooq.lambda.function 为什么只使用Function和BiFunction ? 我们还包括对Function1到...
1、jOOR源码研习,并优化对Class、Field等的缓存 2、模仿Glide在View中监听Activity的生命周期 3、整理日志规范及方案记录 4、总结开发过程中的异常处理 5、总结CoordinatorLayout中Behavior机制中的有向无环图实现 ...
默认情况下,所使用的服务为https://url.joor.net,如果要使用其他服务,只需转到扩展选项并设置后端URL。 警告:这是该服务和Google Chrome扩展程序的非常初始的版本。 我们欢迎您提供反馈,但不要期望扩展的稳定...