首页 | 互联网 | IT动态 | Cisco | Windows | Linux | Java | .Net | Oracle | 华为 | 存储世界 | 服务器 | 网络设备 | IDC | 安全 | 求职招聘
IT培训 | 数字网校 | 技术专题 | 电子书下载 | 教学视频 | 网页设计 | 平面设计 | 解决方案 | 直播室 | 虚拟考场 | 搜索 | 博客 | 沙龙 | 论坛
中国IT实验室Linux频道
中国IT教育
 
首页 资讯动态 认证考试 新手入门 核心技术 高级技术 J2EE J2ME Java&XML 开源技术 其他技术 RSS订阅 论坛 专题
您现在的位置: 中国IT实验室 >> Java >> 核心技术 >> 高级编程 >> 文章正文

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

文章来源中国IT实验室收集整理 作者superak 更新时间2007-3-13 保存本文保存本文 推荐给好友推荐给好友 收藏本页收藏本页

     感谢引入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
【责编:Peng】

中国IT教育

相关产品和培训
文章评论
 友情推荐链接
 认证培训
 专题推荐

 ·超前体验 Oracle 11g的5个新特性
 ·揭密使用VB.NET的五个实用技巧
 ·Oracle和SQL Server常用函数对比专题
 ·展现C#世界 C#程序设计专题
 ·Java入门 Tomcat的配置技巧精华专题
 ·Oracle RMAN物理备份技术详解
 ·JAVA开发利器——JBuilder知多少
 ·Hello,web2.0技术进阶专题
 ·从入门到精通 java初学者实践系列教程
 ·JAVA 与 .NET两强对垒 到底该选什么?
 今日更新
 社区讨论
 博客论点
 频道精选
 Java 频道导航