【Android应用开发】-(21)Android中巧用反射解决程序兼容性问题

    Android的更新速度太快,因为她的开源,所以造就了一批技术公司,一堆的方案,从而各有特色。对于一个想要深入了解系统的开发者来说这是幸运的,但从一个产品角度来看,这是致命的。我们开发应用程序,为了保证程序的兼容性,我们买了很多设备做兼容性测试,但往往不如人意。这里不打算解决此问题,只是唠叨下。本文只是介绍一个简单的技巧来做兼容。

    背景:框架层的某个方法在新版本中添加了一个参数或者少了几个参数,为了程序的兼容性,必须要解决这个问题。否则将会多出很多个版本!这可怎么办呢?办法是有的,使用Java中的反射技术! 这里只写了个简单的演示程序。至于什么是反射技术,反射怎么用,请看这篇博文java反射详解 - Rollen Holt - 博客园 

    很简单,直接上代码

public class Demo {

	public void setABC(int id,String name){
	}
	
	public void setDEF(int id,String name,String pwd){
		System.out.println("id="+id+",name="+name+";pwd="+pwd);
	}
}

package org.winplus.java;

import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method;

public class Test {

	public static void main(String[] args) {
		
	}
	
	/**
	 * 得到类中的所有方法
	 */
	private static void getAllMethods(){
		Class clz = Demo.class;
		Method[] method = clz.getDeclaredMethods();

		for (Method m : method) {
			Class retType = m.getReturnType();
			Class[] paramTypes = m.getParameterTypes();

			for (int j = 0; j < paramTypes.length; j++) {
				if (j > 0)
					System.out.print(" , "); 
				System.out.print(paramTypes[j].getName());
			}
		}
	}
	
	/**
	 * 得到指定的方法,并调用方法
	 */
	private static void  exeMethod(){
		Class clz = Demo.class;
		Class[] clzs = new Class[3];
		clzs[0] = int.class;
		clzs[1] = String.class;
		clzs[2] = String.class;
		try {
			Method mth  = clz.getDeclaredMethod("setDEF", clzs);
				mth.invoke(new Demo(), 12,"tang","haha");
			System.out.println(mth.getName());
		} catch (SecurityException e) {
			e.printStackTrace();
		} catch (NoSuchMethodException e) {
			e.printStackTrace();
		} catch (IllegalArgumentException e) {
			e.printStackTrace();
		} catch (IllegalAccessException e) {
			e.printStackTrace();
		} catch (InvocationTargetException e) {
			e.printStackTrace();
		}
	}
}

原创文章,转载请注明出处:http://blog.csdn.net/tangcheng_ok

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值