java

位置:IT落伍者 >> java >> 浏览文章

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


发布日期:2021年03月24日
 
使用Java5特性来简化反射编程

感谢引入varargs和autoboxingJava彻底的简化了我们对反射的使用关于varargs的一个有趣的事是好像没有平台通知我们说varargs现在是可用的当然有一些IDE在popup或其他的地方用Object表识取代了Object[]标识

但是如果你没有注意到的话那么这对你是不公平的看看下面的代码吧你就会知道我为什么这么说

package orgjavalobbytntvararg;

import javalangreflectMethod;

public class TestReflectionExample {

public static void main(String[] args) throws Exception {

String s = Test String;

preJava(s);

postJava(s);

}

private static void preJava(String s) throws Exception {

// First do a substring

Class c = sgetClass();

Method m = cgetMethod(substring new Class[] { intclass intclass });

Object obj = minvoke(s new Object[] { new Integer() new Integer() });

Systemoutprintln(obj);

// Next do a length

Method m = cgetMethod(length null);

Integer lengthObj = (Integer)minvoke(s null);

int length = lengthObjintValue();

Systemoutprintln(length);

}

private static void postJava(String s) throws Exception {

// First do a substring

Class<?> c = sgetClass();

Method m = cgetMethod(substring intclass intclass);

Object obj = minvoke(s );

Systemoutprintln(obj);

// Next do a length

Method m = cgetMethod(length);

int length = (Integer)minvoke(s);

Systemoutprintln(length);

}

}

上面的两段代码都做相同的事情但是通过使用varargs和autoboxing的力量方法的调用变得非常简单例如

// Pre Java

Object obj = minvoke(s new Object[] { new Integer() new Integer() });

// Post Java Varargs + Autoboxing

Object obj = minvoke(s );

译者加注varargs使得Pose Java 的代码由数组类型的一个参数 如:

new Object[] { new Integer() new Integer() }

简化成了两个参数new Integer()和new Integer()

而autoboxing使得new Integer()和new Integer()简化成了

下面是另外一个例子

// Pre Java

Method m = cgetMethod(length null);

Integer lengthObj = (Integer)minvoke(s null);

// Post Java Inferred varargs (no arguments) and autounboxing

Method m = cgetMethod(length);

int length = (Integer)minvoke(s);

译者加注varargs使得Pose Java 的代码由两个必须的参数简化成一个如从length null简化成了length

而autoboxing使得(Integer)minvoke(s)的一个整型对象能直接赋值给一个int型的 变量length

运行结果

C:\java>java TestReflectionExample

Test

Test

               

上一篇:Java定时执行任务的三种方法

下一篇:java字母大小写转换问题