快速业务通道

java反射机制系列(二)例子 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-14

java反射机制系列(二)例子

时间:2011-09-24

下面我以顾客买相机为例来说明Java反射机制的应用。例子中涉及的类和接口有:

Camera接口:定义了takePhoto()方法。

Camera01类:一种照相机的类型,实现Camera接口。

Camera02类:另一种照相机的类型,实现Camera接口。

Seller类:卖照相机。

Customer类:买相机,有main方法。

所有类都放在com包里

程序如下:

public interface Camera {   //声明照相机必须可以拍照 public void takePhoto(); } public class Camera01 implements Camera { private final int prefixs =300;//300万象素 private final double optionZoom=3.5; //3.5倍变焦 public void takePhoto() {  System.out.println("Camera01 has taken a photo"); } }

类似的有

public class Camera02 implements Camera { private final int prefixs =400; private final double optionZoom=5; public void takePhoto() {  System.out.println("Camera02 has taken a photo"); } }

java反射机制系列(二)例子(2)

时间:2011-09-24

顾客出场了

public class Customer { public static void main(String[] args){  //找到一个售货员  Seller seller = new Seller();  //向售货员询问两种相机的信息  seller.getDescription("com.Camera01");  seller.getDescription("com.Camera02");  //觉得Camera02比较好,叫售货员拿来看  Camera camera =(Camera)seller.getCamera("com.Camera02");  //让售货员拍张照试一下  seller.testFuction(camera, "takePhoto"); } }

Seller类通过Java反射机制实现

import java.lang.reflect.Field; import java.lang.reflect.Method; public class Seller { //向顾客描述商品信息 public void getDescription(String type){  try {  Class cla = Class.forName(type);  //生成一个实例对象,在编译时我们并不知道obj是什么类型。  Object obj = cla.newInstance();  //获得type类型所有已定义类变量及方法。  Field[] fileds = cla.getDeclaredFields();  Method[]methods = cla.getDeclaredMethods();  System.out.println("The arguments of this Camera is:");  for(int i=0;i<fileds.length;i++){   fileds[i].setAccessible(true);   //输出类变量的定义及obj实例中对应的值   System.out.println(fileds[i]+":"+fileds[i].get(obj));  }  System.out.println("The function of this Camera:");  for(int i=0;i<methods.length;i++){   //输出类中方法的定义   System.out.println(methods[i]);  }  System.out.println();  } catch (Exception e) {  System.out.println("Sorry , no such type");  } } //使用商品的某个功能 public void testFuction(Object obj,String function){  try {  Class cla = obj.getClass();  //获得cla类中定义的无参方法。  Method m = cla.getMethod(function, null);  //调用obj中名为function的无参方法。  m.invoke(obj, null);  } catch (Exception e) {  System.out.println("Sorry , no such function");    } } //拿商品给顾客 public Object getCamera(String type){  try {  Class cla = Class.forName(type);  Object obj = cla.newInstance();  return obj;  } catch (Exception e) {  System.out.println("Sorry , no such type");  return null;  } } }

程序到此结束,下一篇我将对程序进行分析,并补充一些内容。

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号