H5W3
当前位置:H5W3 > 其他技术问题 > 正文

使用Java5特性来简化反射编程

     感谢引入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 5Object 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-5Method 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的代码由两个必须的参数,简化成一个,如从”length”, null简化成了”length”;而auto-boxing使得(Integer)m2.invoke(s)的一个整型对象能直接赋值给一个int型的 变量,length 。运行结果:C:\java>java TestReflectionExampleTest11Test11

本文地址:H5W3 » 使用Java5特性来简化反射编程

评论 0

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址