利用Java反射机制取代switch判断

Java反射机制】

             Java反射机制是在运行状态中,对于任意一个类,都能够知道这个类的所有属性和方法;对于任意一个对象,都能够调用它的任意一个方法;这种动态获取的信息以及动态调用对象的方法的功能称为Java语言的反射机制。

Java反射机制主要提供了以下功能: 在运行时判断任意一个对象所属的类;在运行时构造任意一个类的对象;在运行时判断任意一个类所具有的成员变量和方法;在运行时调用任意一个对象的方法;生成动态代理。

[java]  view plain  copy
  1. import java.lang.reflect.Method;  
  2. import java.util.HashMap;  
  3. import java.util.Map;  
  4.   
  5. /** 
  6.  * @功能描述  Java反射机制     取代   Switch Case 
  7.  * @author 吥 悔 
  8.  * @QQ 379839355 
  9.  * @时间 2015年8月2日 下午11:11:11 
  10.  */  
  11. public class SwitchCaseDemo {  
  12.     private static Map<Integer, Method> maps;  
  13.     // 绑定方法  
  14.     static {  
  15.         maps = new HashMap<Integer, Method>();  
  16.         try {  
  17.             // maps.put("参数", "方法名")  
  18.             maps.put(1new SwitchCaseDemo().getClass().getMethod("sayOne"));  
  19.             maps.put(2new SwitchCaseDemo().getClass().getMethod("sayTwo"));  
  20.             maps.put(3new SwitchCaseDemo().getClass().getMethod("sayThree"));  
  21.         } catch (Exception e) {  
  22.             e.printStackTrace();  
  23.         }  
  24.     }  
  25.       
  26.     /** 
  27.      * 反射机制 
  28.      * @param y 参数 
  29.      */  
  30.     private void demoValidate2(int y) {  
  31.         try {  
  32.             // 判断Map集合中是否存在  
  33.             if(maps.containsKey(y)) {  
  34.                 // 获取方法对象  
  35.                 Method methodName = maps.get(y);  
  36.                 // 调用方法  
  37.                 methodName.invoke(new SwitchCaseDemo());  
  38.             }  
  39.         } catch (Exception e) {  
  40.             e.printStackTrace();  
  41.         }  
  42.     }  
  43.       
  44.     /** 
  45.      * switch case 
  46.      * @param x 参数 
  47.      */  
  48.     private void demoValidate1(int x) {  
  49.         switch (x) {  
  50.             case 1:  
  51.                 sayOne();  
  52.                 break;  
  53.             case 2:  
  54.                 sayTwo();  
  55.                 break;  
  56.             case 3:  
  57.                 sayThree();  
  58.                 break;  
  59.             default:  
  60.                 break;  
  61.         }  
  62.     }  
  63.       
  64.     public void sayOne() {  
  65.         System.out.println("This is say One method !");  
  66.     }  
  67.       
  68.     public void sayTwo() {  
  69.         System.out.println("This is say Two method !");  
  70.     }  
  71.       
  72.     public void sayThree() {  
  73.         System.out.println("This is say Three method !");  
  74.     }  
  75.       
  76.     public static void main(String[] args) {  
  77.         SwitchCaseDemo sc = new SwitchCaseDemo();  
  78.         // 以毫秒为单位计算  
  79. //      long startTime = System.currentTimeMillis();//获取当前时间  
  80. //      demoValidate(3);  
  81. //      long endTime = System.currentTimeMillis();  
  82. //      System.out.println("程序运行时间:" + (endTime - startTime) + "ms");  
  83.           
  84.         // 以纳秒为单位计算  
  85.         long start = System.nanoTime(); //获取当前时间  
  86.         sc.demoValidate1(3);  
  87.         long end = System.nanoTime();  
  88.         System.out.println("程序运行时间: " + (end - start) + "ns");  
  89.           
  90.         System.out.println("---- 反射实现 ----");  
  91.           
  92.         long start2 = System.nanoTime(); //获取当前时间  
  93.         sc.demoValidate2(3);  
  94.         long end2 = System.nanoTime();  
  95.         System.out.println("程序运行时间: " + (end2 - start2) + "ns");  
  96.     }  
  97. }  
注意事项:

执行结果:


转自:http://blog.csdn.net/qq_14852397/article/details/47222857

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值