科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件使用Java 5特性来简化反射编程

使用Java 5特性来简化反射编程

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

本文举例说明Java 5中的var-args和auto-boxing如何实现简化对反射的使用。供大家参考!

作者:中国IT实验室 来源:中国IT实验室 2007年9月3日

关键字: java 反射 编程

  • 评论
  • 分享微博
  • 分享邮件

感谢引入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 。

运行结果:

C:\java>java TestReflectionExample

Test

11

Test

11

 

查看本文来源

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章