使用Java5特性来简化反射编程
来源:互联网 发布:centos 7安装教程 编辑:程序博客网 时间:2024/06/05 00:31
使用Java5特性来简化反射编程
作者:R.J. Lorimer
作者:R.J. Lorimer
感谢引入var-args和auto-boxing,Java5彻底的简化了我们对反射的使用。关于var-args的一个有趣的事是:好像没有平台通知我们说,var-args现在是可用的。当然,有一些IDE在pop-up或其他的地方用Object...表识取代了Object[]标识。但是如果你没有注意到的话,那么这对你是不公平的。看看下面的代码吧,你就会知道我为什么这么说。
package org.javalobby.tnt.vararg;
import java.lang.reflect.Method;
public class TestReflectionExample {
public static void main(String[] args) throws Exception {
String s = "Test String";
preJava5(s);
postJava5(s);
}
private static void preJava5(String s) throws Exception {
// First, do a substring
Class c = s.getClass();
Method m = c.getMethod("substring", new Class[] { int.class, int.class });
Object obj = m.invoke(s, new Object[] { new Integer(0), new Integer(4) });
System.out.println(obj);
// Next, do a 'length'
Method m2 = c.getMethod("length", null);
Integer lengthObj = (Integer)m2.invoke(s, null);
int length = lengthObj.intValue();
System.out.println(length);
}
private static void postJava5(String s) throws Exception {
// First, do a substring
Class> c = s.getClass();
Method m = c.getMethod("substring", int.class, int.class);
Object obj = m.invoke(s, 0, 4);
System.out.println(obj);
// Next, do a 'length'
Method m2 = c.getMethod("length");
int length = (Integer)m2.invoke(s);
System.out.println(length);
}
}
上面的两段代码都做相同的事情,但是通过使用var-args和auto-boxing的力量,方法的调用变得非常简单。例如:
// Pre Java 5
Object obj = m.invoke(s, new Object[] { new Integer(0), new Integer(4) });
// Post Java 5 - Var-args + Autoboxing.
Object obj = m.invoke(s, 0, 4);
//译者加注:var-args使得Pose Java 5的代码由数组类型的一个参数,如new Object[] { new Integer(0), new Integer(4) }简化成了两个参数,new Integer(0)和new Integer(4) ;而auto-boxing使得new Integer(0)和new Integer(4)简化成了0和4。
// Pre Java 5
Object obj = m.invoke(s, new Object[] { new Integer(0), new Integer(4) });
// Post Java 5 - Var-args + Autoboxing.
Object obj = m.invoke(s, 0, 4);
//译者加注:var-args使得Pose Java 5的代码由数组类型的一个参数,如new Object[] { new Integer(0), new Integer(4) }简化成了两个参数,new Integer(0)和new Integer(4) ;而auto-boxing使得new Integer(0)和new Integer(4)简化成了0和4。
下面是另外一个例子:
// Pre Java-5
Method m2 = c.getMethod("length", null);
Integer lengthObj = (Integer)m2.invoke(s, null);
// Post Java-5. Inferred var-args (no arguments) and auto-unboxing.
Method m2 = c.getMethod("length");
int length = (Integer)m2.invoke(s);
//译者加注:var-args使得Pose Java 5的代码由两个必须的参数,没有要输入null,简化成一个,如从"length", null简化成了"length";而auto-boxing使得(Integer)m2.invoke(s)的一个整型对象能直接赋值给一个int型的变量,length 。
// Pre Java-5
Method m2 = c.getMethod("length", null);
Integer lengthObj = (Integer)m2.invoke(s, null);
// Post Java-5. Inferred var-args (no arguments) and auto-unboxing.
Method m2 = c.getMethod("length");
int length = (Integer)m2.invoke(s);
//译者加注:var-args使得Pose Java 5的代码由两个必须的参数,没有要输入null,简化成一个,如从"length", null简化成了"length";而auto-boxing使得(Integer)m2.invoke(s)的一个整型对象能直接赋值给一个int型的变量,length 。
未完待续
原文链接:
http://www.javalobby.org/java/forums/t62171.html
http://www.javalobby.org/java/forums/t62171.html
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 使用Java5特性来简化反射编程
- 使用Java 5特性来简化反射编程
- 使用反射、特性简化代码
- [Java5新特性]反射
- Tip15 使用dynamic来简化反射实现
- 如何使用LINQ来简化编程
- 使用dynamic来简化反射实现,并且提高了性能。
- 建议15: 使用dynamic来简化反射实现
- 使用反射简化findviewbyid
- 使用dynamic简化反射
- 使用LINQ来简化编程的7个技巧
- 【翻译】使用LINQ来简化编程的7个技巧
- 使用LINQ来简化编程的7个技巧
- 代码的“门面”——模式系列谈之Fa ade模式
- 和依赖的斗争——谈谈使用模式前后的依赖关系变化
- 我没有使用Spring
- “凿壁借光”的模式场景——设计模式系列谈之Adapter模式
- AJAX开发的性能冲击:使用AJAX提高WEB应用的带宽使用率
- 使用Java5特性来简化反射编程
- ASP.NET中的地址重定向(页面跳转)
- 脚本引擎初步研究
- 使用AJAX优化客户端——Iconix Pharmaceuticals使用AJAX和J2EE创建功能强大的瘦客户端的实践(译文)
- 从诸葛亮的三个锦囊妙计谈策略模式
- 开放接口、隐藏细节——由模式谈面向对象的基本原则之开闭原则
- 组合还是继承,这是一个问题?——由模式谈面向对象的原则之多用组合、少用继承
- 软件命令行解说:批量转换图片文件格式
- 北京Tech.ed2006微软技术大会场记(9.21~9.23)