WEB开发网
开发学院WEB开发Jsp 使用Java5特性来简化反射编程 阅读

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

 2008-01-05 08:24:11 来源:WEB开发网   
核心提示: 感谢引入var-args和auto-boxing,java5彻底的简化了我们对反射的使用,使用Java5特性来简化反射编程,关于var-args的一个有趣的事是:似乎没有平台通知我们说,var-args现在是可用的,简化成一个,如从"length", null简化成了"length&qu

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

Tags:使用 Java 特性

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接